<?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>237579</bug_id>
          
          <creation_ts>2022-03-07 20:37:56 -0800</creation_ts>
          <short_desc>[Curl] Implement WebSocketTask</short_desc>
          <delta_ts>2022-05-29 18:11:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Don Olmstead">don.olmstead</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1849090</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-07 20:37:56 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849091</commentid>
    <comment_count>1</comment_count>
      <attachid>454068</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-07 20:40:20 -0800</bug_when>
    <thetext>Created attachment 454068
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849092</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-03-07 20:43:57 -0800</bug_when>
    <thetext>The entry point is in ThreadableWebSocketChannel::create</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849093</commentid>
    <comment_count>3</comment_count>
      <attachid>454069</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-07 20:49:04 -0800</bug_when>
    <thetext>Created attachment 454069
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849829</commentid>
    <comment_count>4</comment_count>
      <attachid>454282</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-09 14:07:48 -0800</bug_when>
    <thetext>Created attachment 454282
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850207</commentid>
    <comment_count>5</comment_count>
      <attachid>454391</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-10 12:10:35 -0800</bug_when>
    <thetext>Created attachment 454391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850220</commentid>
    <comment_count>6</comment_count>
      <attachid>454391</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2022-03-10 13:35:50 -0800</bug_when>
    <thetext>Comment on attachment 454391
Patch

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

Looks mostly good.  Thanks for upstreaming.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:46
&gt; +    if (request.url().protocolIs(&quot;wss&quot;) &amp;&amp; WebCore::DeprecatedGlobalSettings::allowsAnySSLCertificate())
&gt; +        WebCore::CurlContext::singleton().sslHandle().setIgnoreSSLErrors(true);

It would be great if we could do this per task or at least per domain.  That&apos;s for a different patch, though.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:55
&gt; +WebSocketTask::~WebSocketTask()
&gt; +{
&gt; +    destructStream();
&gt; +}

This might be a sign that the stream should be a smart-pointer-like object that cleans up when destroyed.  It also might not.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:96
&gt; +void WebSocketTask::cancel()
&gt; +{
&gt; +
&gt; +}
&gt; +
&gt; +void WebSocketTask::resume()
&gt; +{
&gt; +
&gt; +}

Do these need to do anything?

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:119
&gt; +            handshakeMessage.remove(handshakeMessage.length() - 2, 2); // Remove the terminating &apos;\r\n&apos;
&gt; +            handshakeMessage.append(&quot;Cookie: &quot;);
&gt; +            handshakeMessage.append(cookieHeaderField);
&gt; +            handshakeMessage.append(&quot;\r\n\r\n&quot;);

This does 4 unnecessary string allocations and copies.  If handshakeMessage were a StringBuilder or even a Vector&lt;char&gt; it would be more efficient.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:125
&gt; +    auto buffer = makeUniqueArray&lt;uint8_t&gt;(handshakeData.length());
&gt; +    memcpy(buffer.get(), handshakeData.data(), handshakeData.length());

This is another copy and allocation that might be able to be removed.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:156
&gt; +    auto frameResult = receiveFrames([this](WebCore::WebSocketFrame::OpCode opCode, const uint8_t* data, size_t length) {

It would probably be worth capturing a WeakPtr&lt;WebSocketTask&gt; and returning early if it&apos;s null to be safe against using this after it has been freed.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.cpp:422
&gt; +    callOnMainRunLoop([this, code, reason] {

Ditto, this may be deallocated by the time the lambda executes, which would be bad.

&gt; Source/WebKit/NetworkProcess/curl/WebSocketTaskCurl.h:64
&gt; +    enum class State {

nit
 : uint8_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851143</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-14 21:38:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/90287981&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872105</commentid>
    <comment_count>8</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-05-26 14:15:56 -0700</bug_when>
    <thetext>Pull request: https://github.com/webkit/webkit/pull/1071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872278</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-26 23:24:31 -0700</bug_when>
    <thetext>Committed r294932 (251043@main): &lt;https://commits.webkit.org/251043@main&gt;

Reviewed commits have been landed. Closing PR #1071 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872674</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-05-29 18:11:58 -0700</bug_when>
    <thetext>&gt; Committed r294932 (251043@main): &lt;https://commits.webkit.org/251043@main&gt;

WinCairo WK1 is crashing.
Bug 241087 – [curl] REGRESSION(251043@main): &quot;ASSERTION FAILED: channel&quot; in WebCore::ThreadableWebSocketChannel::create</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454068</attachid>
            <date>2022-03-07 20:40:20 -0800</date>
            <delta_ts>2022-03-07 20:49:04 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-237579.diff</filename>
            <type>text/plain</type>
            <size>26604</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTb2NrZXRUYXNrLmgKaW5kZXggMzA5
YmFiNDI1N2IwLi5kNjFlNjdkYzM0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU29ja2V0VGFzay5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiV2ViU29ja2V0
VGFza0NvY29hLmgiCiAjZWxpZiBVU0UoU09VUCkKICNpbmNsdWRlICJXZWJTb2NrZXRUYXNrU291
cC5oIgorI2VsaWYgVVNFKENVUkwpCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwuaCIKICNl
bHNlCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCmluZGV4IDAw
MTIxZWFiOGNmMC4uODkyZDFiMjU0MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Np
b25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUph
ckRCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC01OCw0ICs1OSw5IEBAIE5ldHdvcmtTZXNz
aW9uQ3VybDo6fk5ldHdvcmtTZXNzaW9uQ3VybCgpCiAKIH0KIAorc3RkOjp1bmlxdWVfcHRyPFdl
YlNvY2tldFRhc2s+IE5ldHdvcmtTZXNzaW9uQ3VybDo6Y3JlYXRlV2ViU29ja2V0VGFzayhXZWJQ
YWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHByb3RvY29s
LCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBib29sKQoreworICAgIHJldHVybiBtYWtl
VW5pcXVlPFdlYlNvY2tldFRhc2s+KGNoYW5uZWwsIHJlcXVlc3QsIHByb3RvY29sKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKaW5kZXggZmUxNjc1NjAyMzhlLi45ZGNk
YjA1YWI5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9O
ZXR3b3JrU2Vzc2lvbkN1cmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1
cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKQEAgLTM5LDYgKzM5LDkgQEAgcHVibGljOgogICAgIH0K
ICAgICBOZXR3b3JrU2Vzc2lvbkN1cmwoTmV0d29ya1Byb2Nlc3MmLCBjb25zdCBOZXR3b3JrU2Vz
c2lvbkNyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIH5OZXR3b3JrU2Vzc2lvbkN1cmwoKTsKKwor
cHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0VGFzaz4gY3JlYXRlV2ViU29j
a2V0VGFzayhXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIGJvb2wpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1
cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL1dlYlNvY2tldFRhc2tDdXJsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjBmMTUwOGNkNDFkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9XZWJTb2NrZXRUYXNrQ3VybC5jcHAKQEAgLTAsMCArMSw0MzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNv
Y2tldFRhc2tDdXJsLmgiCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAi
TmV0d29ya1NvY2tldENoYW5uZWwuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ3VybFN0cmVhbVNjaGVkdWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
c3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TYW1lU2l0ZUluZm8uaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYlNvY2tldFRhc2s6OldlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENo
YW5uZWwmIGNoYW5uZWwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAgICA6IG1fY2hhbm5lbChjaGFubmVsKQorICAgICwg
bV9yZXF1ZXN0KHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX3Byb3RvY29sKHByb3Rv
Y29sKQorICAgICwgbV9zY2hlZHVsZXIoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbigp
LnN0cmVhbVNjaGVkdWxlcigpKQoreworICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMo
IndzcyIpICYmIFdlYkNvcmU6OkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6YWxsb3dzQW55U1NM
Q2VydGlmaWNhdGUoKSkKKyAgICAgICAgV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbigp
LnNzbEhhbmRsZSgpLnNldElnbm9yZVNTTEVycm9ycyh0cnVlKTsKKworICAgIG1fc3RyZWFtSUQg
PSBtX3NjaGVkdWxlci5jcmVhdGVTdHJlYW0ocmVxdWVzdC51cmwoKSwgKnRoaXMpOworICAgIG1f
Y2hhbm5lbC5kaWRTZW5kSGFuZHNoYWtlUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qo
bV9yZXF1ZXN0KSk7Cit9CisKK1dlYlNvY2tldFRhc2s6On5XZWJTb2NrZXRUYXNrKCkKK3sKKyAg
ICBkZXN0cnVjdFN0cmVhbSgpOworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRTdHJpbmco
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiB1dGY4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW5lZCkgeworICAg
ICAgICBpZiAoIXNlbmRGcmFtZShXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dCwg
dXRmOC5kYXRhKCksIHV0Zjguc2l6ZSgpKSkKKyAgICAgICAgICAgIGRpZEZhaWwoIkZhaWxlZCB0
byBzZW5kIFdlYlNvY2tldCBmcmFtZS4iKTsKKyAgICB9CisgICAgY2FsbGJhY2soKTsKK30KKwor
dm9pZCBXZWJTb2NrZXRUYXNrOjpzZW5kRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6T3BlbmVkKSB7CisgICAgICAgIGlmICghc2VuZEZyYW1lKFdlYkNvcmU6
OldlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkp
CisgICAgICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWUuIik7
CisgICAgfQorICAgIGNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2xvc2Uo
aW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6Q2xvc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q29ubmVjdGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpIYW5kc2hha2luZykgeworICAg
ICAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6
Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzZW5kQ2xvc2luZ0hhbmRzaGFrZUlmTmVlZGVkKGNvZGUsIHJlYXNvbik7Cit9
CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2FuY2VsKCkKK3sKKworfQorCit2b2lkIFdlYlNvY2tl
dFRhc2s6OnJlc3VtZSgpCit7CisKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRPcGVuKFdl
YkNvcmU6OkN1cmxTdHJlYW1JRCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29ubmVj
dGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpIYW5kc2hha2lu
ZzsKKworICAgIG1faGFuZHNoYWtlID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpXZWJTb2NrZXRIYW5k
c2hha2U+KG1fcmVxdWVzdC51cmwoKSwgbV9wcm90b2NvbCwgbV9yZXF1ZXN0Lmh0dHBVc2VyQWdl
bnQoKSwgbV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6
T3JpZ2luKSwgbV9yZXF1ZXN0LmFsbG93Q29va2llcygpLCBmYWxzZSk7CisgICAgbV9oYW5kc2hh
a2UtPnJlc2V0KCk7CisgICAgbV9oYW5kc2hha2UtPmFkZEV4dGVuc2lvblByb2Nlc3NvcihtX2Rl
ZmxhdGVGcmFtZXIuY3JlYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKCkpOworCisgICAgYXV0byBtZXNz
YWdlID0gbV9oYW5kc2hha2UtPmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKTsKKyAgICBTdHJpbmcg
aGFuZHNoYWtlTWVzc2FnZShtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5sZW5ndGgoKSk7CisKKyAg
ICBpZiAobV9yZXF1ZXN0LmFsbG93Q29va2llcygpKSB7CisgICAgICAgIGF1dG8gaW5jbHVkZVNl
Y3VyZUNvb2tpZXMgPSBtX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJcygid3NzIikgPyBXZWJDb3Jl
OjpJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzIDogV2ViQ29yZTo6SW5jbHVkZVNlY3VyZUNvb2tp
ZXM6Ok5vOworICAgICAgICBTdHJpbmcgY29va2llSGVhZGVyRmllbGQgPSBtX2NoYW5uZWwuc2Vz
c2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUobV9yZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIFdlYkNvcmU6OlNhbWVTaXRl
SW5mbzo6Y3JlYXRlKG1fcmVxdWVzdCksIG1fcmVxdWVzdC51cmwoKSwgc3RkOjpudWxsb3B0LCBz
dGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBXZWJDb3JlOjpTaG91bGRBc2tJVFA6
OlllcywgV2ViQ29yZTo6U2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc6Ok5vKS5m
aXJzdDsKKyAgICAgICAgaWYgKCFjb29raWVIZWFkZXJGaWVsZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGhhbmRzaGFrZU1lc3NhZ2UucmVtb3ZlKGhhbmRzaGFrZU1lc3NhZ2UubGVuZ3RoKCkg
LSAyLCAyKTsgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hdGluZyAnXHJcbicKKyAgICAgICAgICAgIGhh
bmRzaGFrZU1lc3NhZ2UuYXBwZW5kKCJDb29raWU6ICIpOworICAgICAgICAgICAgaGFuZHNoYWtl
TWVzc2FnZS5hcHBlbmQoY29va2llSGVhZGVyRmllbGQpOworICAgICAgICAgICAgaGFuZHNoYWtl
TWVzc2FnZS5hcHBlbmQoIlxyXG5cclxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRv
IGhhbmRzaGFrZURhdGEgPSBoYW5kc2hha2VNZXNzYWdlLnV0ZjgoKTsKKyAgICBhdXRvIGJ1ZmZl
ciA9IG1ha2VVbmlxdWVBcnJheTx1aW50OF90PihoYW5kc2hha2VEYXRhLmxlbmd0aCgpKTsKKyAg
ICBtZW1jcHkoYnVmZmVyLmdldCgpLCBoYW5kc2hha2VEYXRhLmRhdGEoKSwgaGFuZHNoYWtlRGF0
YS5sZW5ndGgoKSk7CisKKyAgICBtX3NjaGVkdWxlci5zZW5kKG1fc3RyZWFtSUQsIFdURk1vdmUo
YnVmZmVyKSwgaGFuZHNoYWtlRGF0YS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFz
azo6ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6Q3VybFN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpT
aGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29ubmVj
dGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghYnVmZmVyLnNpemUoKSkgeworICAgICAgICBkaWRDbG9zZSgwLCB7IH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2hvdWxkRGlzY2FyZFJlY2VpdmVkRGF0YSB8
fCBtX3JlY2VpdmVkQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFhcHBlbmRSZWNlaXZlZEJ1ZmZlcihidWZmZXIpKSB7CisgICAgICAgIGRpZEZhaWwoIlJhbiBv
dXQgb2YgbWVtb3J5IHdoaWxlIHJlY2VpdmluZyBXZWJTb2NrZXQgZGF0YS4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZU9wZW5p
bmdIYW5kc2hha2UoKTsKKyAgICBpZiAoIXZhbGlkYXRlUmVzdWx0Lmhhc192YWx1ZSgpKSB7Cisg
ICAgICAgIGRpZEZhaWwodmFsaWRhdGVSZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVJlc3VsdC52YWx1ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGZyYW1lUmVzdWx0ID0gcmVjZWl2ZUZyYW1lcyhbdGhpc10oV2ViQ29yZTo6
V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBvcENvZGUsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBsZW5ndGgpIHsKKyAgICAgICAgc3dpdGNoIChvcENvZGUpIHsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dDoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGxlbmd0aCA/IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwg
bGVuZ3RoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNzYWdlLmlz
TnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBtX2NoYW5uZWwuZGlkUmVjZWl2ZVRleHQobWVz
c2FnZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkaWRGYWls
KCJDb3VsZCBub3QgZGVjb2RlIGEgdGV4dCBmcmFtZSBhcyBVVEYtOC4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6V2ViU29ja2V0
RnJhbWU6Ok9wQ29kZUJpbmFyeToKKyAgICAgICAgICAgIG1fY2hhbm5lbC5kaWRSZWNlaXZlQmlu
YXJ5RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6V2ViU29ja2V0RnJh
bWU6Ok9wQ29kZUNsb3NlOgorICAgICAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICAg
ICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZl
bnRDb2RlOjpDbG9zZUV2ZW50Q29kZU5vU3RhdHVzUmN2ZDsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNv
cmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29kZUFibm9y
bWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAgICBkaWRGYWlsKCJSZWNlaXZlZCBhIGJyb2tlbiBj
bG9zZSBmcmFtZSBjb250YWluaW5nIGFuIGludmFsaWQgc2l6ZSBib2R5LiIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciBoaWdoQnl0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGFbMF0p
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbG93Qnl0ZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KGRhdGFbMV0pOworICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVudENvZGUg
PSBoaWdoQnl0ZSA8PCA4IHwgbG93Qnl0ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9jbG9zZUV2
ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xv
c2VFdmVudENvZGVOb1N0YXR1c1JjdmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbV9jbG9zZUV2
ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xv
c2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUKKyAgICAgICAgICAgICAgICAgICAgfHwgbV9jbG9z
ZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6
Q2xvc2VFdmVudENvZGVUTFNIYW5kc2hha2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9jbG9z
ZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlOjpD
bG9zZUV2ZW50Q29kZUFibm9ybWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAgICAgICAgZGlkRmFp
bCgiUmVjZWl2ZWQgYSBicm9rZW4gY2xvc2UgZnJhbWUgY29udGFpbmluZyBhIHJlc2VydmVkIHN0
YXR1cyBjb2RlLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA+PSAzKQorICAgICAg
ICAgICAgICAgIG1fY2xvc2VFdmVudFJlYXNvbiA9IFN0cmluZzo6ZnJvbVVURjgoJmRhdGFbMl0s
IGxlbmd0aCAtIDIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fY2xvc2VF
dmVudFJlYXNvbiA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICAgICAgICAgIG1fcmVjZWl2ZWRDbG9z
aW5nSGFuZHNoYWtlID0gdHJ1ZTsKKyAgICAgICAgICAgIHNlbmRDbG9zaW5nSGFuZHNoYWtlSWZO
ZWVkZWQobV9jbG9zZUV2ZW50Q29kZSwgbV9jbG9zZUV2ZW50UmVhc29uKTsKKyAgICAgICAgICAg
IGRpZENsb3NlKG1fY2xvc2VFdmVudENvZGUsIG1fY2xvc2VFdmVudFJlYXNvbik7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENv
ZGVQaW5nOgorICAgICAgICAgICAgaWYgKCFzZW5kRnJhbWUoV2ViQ29yZTo6V2ViU29ja2V0RnJh
bWU6Ok9wQ29kZVBvbmcsIGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgZGlkRmFpbCgi
RmFpbGVkIHRvIHNlbmQgV2ViU29ja2V0IGZyYW1lLiIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChmcmFtZVJlc3VsdCkgeworICAgICAgICBkaWRG
YWlsKCpmcmFtZVJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2Vi
U29ja2V0VGFzazo6ZGlkRmFpbChXZWJDb3JlOjpDdXJsU3RyZWFtSUQsIENVUkxjb2RlIGVycm9y
Q29kZSkKK3sKKyAgICBkaWRGYWlsKG1ha2VTdHJpbmcoIldlYlNvY2tldCBuZXR3b3JrIGVycm9y
OiBlcnJvciBjb2RlICIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihlcnJvckNvZGUpKSk7Cit9CisK
K2Jvb2wgV2ViU29ja2V0VGFzazo6YXBwZW5kUmVjZWl2ZWRCdWZmZXIoY29uc3QgV2ViQ29yZTo6
U2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgc2l6ZV90IG5ld0J1ZmZlclNpemUgPSBtX3Jl
Y2VpdmVCdWZmZXIuc2l6ZSgpICsgYnVmZmVyLnNpemUoKTsKKyAgICBpZiAobmV3QnVmZmVyU2l6
ZSA8IG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fcmVjZWl2ZUJ1ZmZlci5hcHBlbmQoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6c2tpcFJlY2VpdmVkQnVm
ZmVyKHNpemVfdCBsZW5ndGgpCit7CisgICAgbWVtbW92ZShtX3JlY2VpdmVCdWZmZXIuZGF0YSgp
LCBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpICsgbGVuZ3RoLCBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgp
IC0gbGVuZ3RoKTsKKyAgICBtX3JlY2VpdmVCdWZmZXIuc2hyaW5rKG1fcmVjZWl2ZUJ1ZmZlci5z
aXplKCkgLSBsZW5ndGgpOworfQorCitFeHBlY3RlZDxib29sLCBTdHJpbmc+IFdlYlNvY2tldFRh
c2s6OnZhbGlkYXRlT3BlbmluZ0hhbmRzaGFrZSgpCit7CisgICAgaWYgKG1fZGlkQ29tcGxldGVP
cGVuaW5nSGFuZHNoYWtlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX3N0YXRl
ICE9IFN0YXRlOjpIYW5kc2hha2luZyB8fCAhbV9oYW5kc2hha2UgfHwgbV9oYW5kc2hha2UtPm1v
ZGUoKSAhPSBXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OkluY29tcGxldGUpIHsKKyAgICAg
ICAgbV9oYW5kc2hha2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuZXhwZWN0ZWQgaGFuZHNoYWtlaW5nIGNvbmRpdGlvbiJfcyk7CisgICAgfQorCisgICAgYXV0
byBoZWFkZXJMZW5ndGggPSBtX2hhbmRzaGFrZS0+cmVhZFNlcnZlckhhbmRzaGFrZShtX3JlY2Vp
dmVCdWZmZXIuZGF0YSgpLCBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsKKyAgICBpZiAoaGVhZGVy
TGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNraXBSZWNlaXZlZEJ1
ZmZlcihoZWFkZXJMZW5ndGgpOworCisgICAgaWYgKG1faGFuZHNoYWtlLT5tb2RlKCkgIT0gV2Vi
Q29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpDb25uZWN0ZWQpIHsKKyAgICAgICAgYXV0byByZWFz
b24gPSBtX2hhbmRzaGFrZS0+ZmFpbHVyZVJlYXNvbigpOworICAgICAgICBtX2hhbmRzaGFrZSA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZWFzb24pOworICAgIH0K
KworICAgIFN0cmluZyBzZXJ2ZXJTZXRDb29raWUgPSBtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29v
a2llKCk7CisgICAgaWYgKCFzZXJ2ZXJTZXRDb29raWUuaXNFbXB0eSgpKQorICAgICAgICBtX2No
YW5uZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29va2llc0Zyb21I
VFRQUmVzcG9uc2UobV9yZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIG1fcmVxdWVzdC51
cmwoKSwgc2VydmVyU2V0Q29va2llKTsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmVkOwor
ICAgIG1fZGlkQ29tcGxldGVPcGVuaW5nSGFuZHNoYWtlID0gdHJ1ZTsKKworICAgIG1fY2hhbm5l
bC5kaWRDb25uZWN0KG1faGFuZHNoYWtlLT5zZXJ2ZXJXZWJTb2NrZXRQcm90b2NvbCgpLCBtX2hh
bmRzaGFrZS0+YWNjZXB0ZWRFeHRlbnNpb25zKCkpOworICAgIG1fY2hhbm5lbC5kaWRSZWNlaXZl
SGFuZHNoYWtlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZShtX2hhbmRzaGFrZS0+
c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSkpOworCisgICAgbV9oYW5kc2hha2UgPSBudWxscHRy
OworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gV2ViU29ja2V0
VGFzazo6cmVjZWl2ZUZyYW1lcyhGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OldlYlNvY2tldEZyYW1l
OjpPcENvZGUsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIGNhbGxiYWNrKQoreworICAgIGlm
IChtX3N0YXRlICE9IFN0YXRlOjpPcGVuZWQgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6Q2xvc2luZykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHdoaWxlIChtX3JlY2VpdmVCdWZm
ZXIuc2l6ZSgpICYmICFtX3Nob3VsZERpc2NhcmRSZWNlaXZlZERhdGEgJiYgIW1fcmVjZWl2ZWRD
bG9zaW5nSGFuZHNoYWtlKSB7CisgICAgICAgIFdlYkNvcmU6OldlYlNvY2tldEZyYW1lIGZyYW1l
OworICAgICAgICBjb25zdCB1aW50OF90KiBmcmFtZUVuZDsKKyAgICAgICAgU3RyaW5nIGVycm9y
U3RyaW5nOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gV2ViQ29yZTo6V2ViU29ja2V0RnJh
bWU6OnBhcnNlRnJhbWUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9yZWNlaXZlQnVmZmVy
LmRhdGEoKSksIG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCksIGZyYW1lLCBmcmFtZUVuZCwgZXJyb3JT
dHJpbmcpOworICAgICAgICBpZiAocGFyc2VSZXN1bHQgPT0gV2ViQ29yZTo6V2ViU29ja2V0RnJh
bWU6OkZyYW1lSW5jb21wbGV0ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgIGlmIChwYXJzZVJlc3VsdCA9PSBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6RnJhbWVF
cnJvcikKKyAgICAgICAgICAgIHJldHVybiBlcnJvclN0cmluZzsKKworICAgICAgICBhdXRvIGlu
ZmxhdGVSZXN1bHQgPSBtX2RlZmxhdGVGcmFtZXIuaW5mbGF0ZShmcmFtZSk7CisgICAgICAgIGlm
ICghaW5mbGF0ZVJlc3VsdC0+c3VjY2VlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4gaW5mbGF0
ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpOworCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlUmVz
dWx0ID0gdmFsaWRhdGVGcmFtZShmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gKnZhbGlkYXRl
UmVzdWx0OworCisgICAgICAgIGlmICghZnJhbWUuZmluYWwgfHwgZnJhbWUub3BDb2RlID09IFdl
YkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24pIHsKKyAgICAgICAgICAg
IGlmIChmcmFtZS5vcENvZGUgIT0gV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNvbnRp
bnVhdGlvbikgeworICAgICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IGZyYW1lLm9wQ29kZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRhLmFwcGVu
ZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYg
KGZyYW1lLmZpbmFsKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9jb250aW51b3VzRnJh
bWVPcENvZGUsIG1fY29udGludW91c0ZyYW1lRGF0YS5kYXRhKCksIG1fY29udGludW91c0ZyYW1l
RGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRhLmNsZWFyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FsbGJhY2soZnJhbWUub3BD
b2RlLCBmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKworICAgICAgICBpZiAo
IW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBza2lwUmVjZWl2ZWRCdWZm
ZXIoZnJhbWVFbmQgLSBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gV2ViU29ja2V0VGFz
azo6dmFsaWRhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCit7
CisgICAgaWYgKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc1Jlc2VydmVkT3BDb2RlKGZyYW1l
Lm9wQ29kZSkpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJVbnJlY29nbml6ZWQgZnJhbWUg
b3Bjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWUub3BDb2RlKSk7CisKKyAgICBp
ZiAoZnJhbWUucmVzZXJ2ZWQyIHx8IGZyYW1lLnJlc2VydmVkMykKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIk9uZSBvciBtb3JlIHJlc2VydmVkIGJpdHMgYXJlIG9uOiByZXNlcnZlZDIgPSAi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWUucmVzZXJ2ZWQyKSwgIiwgcmVzZXJ2ZWQzID0g
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLnJlc2VydmVkMykpOworCisgICAgaWYgKGZy
YW1lLm1hc2tlZCkKKyAgICAgICAgcmV0dXJuICAiQSBzZXJ2ZXIgbXVzdCBub3QgbWFzayBhbnkg
ZnJhbWVzIHRoYXQgaXQgc2VuZHMgdG8gdGhlIGNsaWVudC4iX3M7CisKKyAgICAvLyBBbGwgY29u
dHJvbCBmcmFtZXMgbXVzdCBub3QgYmUgZnJhZ21lbnRlZC4KKyAgICBpZiAoV2ViQ29yZTo6V2Vi
U29ja2V0RnJhbWU6OmlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmICFmcmFtZS5maW5h
bCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlJlY2VpdmVkIGZyYWdtZW50ZWQgY29udHJv
bCBmcmFtZTogb3Bjb2RlID0gIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLm9wQ29kZSkp
OworCisgICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3QgaGF2ZSBhIHBheWxvYWQgb2YgMTI1
IGJ5dGVzIG9yIGxlc3MsIHdoaWNoIG1lYW5zIHRoZSBmcmFtZSBtdXN0IG5vdCBjb250YWluCisg
ICAgLy8gdGhlICJleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCIgZmllbGQuCisgICAgaWYgKFdlYkNv
cmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSAmJiBXZWJD
b3JlOjpXZWJTb2NrZXRGcmFtZTo6bmVlZHNFeHRlbmRlZExlbmd0aEZpZWxkKGZyYW1lLnBheWxv
YWRMZW5ndGgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUmVjZWl2ZWQgY29udHJvbCBm
cmFtZSBoYXZpbmcgdG9vIGxvbmcgcGF5bG9hZDogIiwgZnJhbWUucGF5bG9hZExlbmd0aCwgIiBi
eXRlcyIpOworCisgICAgLy8gQSBuZXcgZGF0YSBmcmFtZSBpcyByZWNlaXZlZCBiZWZvcmUgdGhl
IHByZXZpb3VzIGNvbnRpbnVvdXMgZnJhbWUgZmluaXNoZXMuCisgICAgLy8gTm90ZSB0aGF0IGNv
bnRyb2wgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGNvbWUgaW4gdGhlIG1pZGRsZSBvZiBjb250aW51
b3VzIGZyYW1lcy4KKyAgICBpZiAobV9oYXNDb250aW51b3VzRnJhbWUgJiYgZnJhbWUub3BDb2Rl
ICE9IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24gJiYgIVdlYkNv
cmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSkKKyAgICAg
ICAgcmV0dXJuICJSZWNlaXZlZCBuZXcgZGF0YSBmcmFtZSBidXQgcHJldmlvdXMgY29udGludW91
cyBmcmFtZSBpcyB1bmZpbmlzaGVkLiJfczsKKworICAgIC8vIEFuIHVuZXhwZWN0ZWQgY29udGlu
dWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVkIHdpdGhvdXQgYW55IGxlYWRpbmcgZnJhbWUuCisgICAg
aWYgKCFtX2hhc0NvbnRpbnVvdXNGcmFtZSAmJiBmcmFtZS5vcENvZGUgPT0gV2ViQ29yZTo6V2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZUNvbnRpbnVhdGlvbikKKyAgICAgICAgcmV0dXJuICJSZWNlaXZl
ZCB1bmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZS4iX3M7CisKKyAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRDbG9zaW5nSGFuZHNoYWtlSWZO
ZWVkZWQoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9k
aWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZjsKKyAgICBpZiAoIW1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlICYmIGNvZGUg
IT0gV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGU6OkNsb3NlRXZlbnRD
b2RlTm90U3BlY2lmaWVkKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGlnaEJ5dGUgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oY29kZSkgPj4gODsKKyAgICAgICAgdW5zaWduZWQgY2hh
ciBsb3dCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGNvZGUpOworICAgICAgICBi
dWYuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KGhpZ2hCeXRlKSk7CisgICAgICAgIGJ1Zi5hcHBl
bmQoc3RhdGljX2Nhc3Q8Y2hhcj4obG93Qnl0ZSkpOworICAgICAgICBhdXRvIHJlYXNvblVURjgg
PSByZWFzb24udXRmOCgpOworICAgICAgICBidWYuYXBwZW5kKHJlYXNvblVURjguZGF0YSgpLCBy
ZWFzb25VVEY4Lmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBpZiAoIXNlbmRGcmFtZShXZWJDb3Jl
OjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlQ2xvc2UsIGJ1Zi5kYXRhKCksIGJ1Zi5zaXplKCkpKQor
ICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWUuIik7CisKKyAg
ICBtX3N0YXRlID0gU3RhdGU6OkNsb3Npbmc7CisgICAgbV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFr
ZSA9IHRydWU7Cit9CisKK2Jvb2wgV2ViU29ja2V0VGFzazo6c2VuZEZyYW1lKFdlYkNvcmU6Oldl
YlNvY2tldEZyYW1lOjpPcENvZGUgb3BDb2RlLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
ZGF0YUxlbmd0aCkKK3sKKyAgICBpZiAobV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZSBmcmFtZShvcENv
ZGUsIHRydWUsIGZhbHNlLCB0cnVlLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKworICAgIGF1dG8gZGVm
bGF0ZVJlc3VsdCA9IG1fZGVmbGF0ZUZyYW1lci5kZWZsYXRlKGZyYW1lKTsKKyAgICBpZiAoIWRl
ZmxhdGVSZXN1bHQtPnN1Y2NlZWRlZCgpKSB7CisgICAgICAgIGRpZEZhaWwoZGVmbGF0ZVJlc3Vs
dC0+ZmFpbHVyZVJlYXNvbigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFZlY3Rvcjx1aW50OF90PiBmcmFtZURhdGE7CisgICAgZnJhbWUubWFrZUZyYW1lRGF0YShmcmFt
ZURhdGEpOworCisgICAgYXV0byBidWZmZXIgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhfdD4oZnJh
bWVEYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlci5nZXQoKSwgZnJhbWVEYXRhLmRhdGEo
KSwgZnJhbWVEYXRhLnNpemUoKSk7CisKKyAgICBtX3NjaGVkdWxlci5zZW5kKG1fc3RyZWFtSUQs
IFdURk1vdmUoYnVmZmVyKSwgZnJhbWVEYXRhLnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sK
KyAgICBpZiAobV9yZWNlaXZlZERpZEZhaWwpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVj
ZWl2ZWREaWRGYWlsID0gdHJ1ZTsKKworICAgIC8vIEh5YmktMTAgc3BlY2lmaWNhdGlvbiBleHBs
aWNpdGx5IHN0YXRlcyB3ZSBtdXN0IG5vdCBjb250aW51ZSB0byBoYW5kbGUgaW5jb21pbmcgZGF0
YQorICAgIC8vIG9uY2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGZhaWxlZCAoc2VjdGlv
biA3LjEuNykuCisgICAgbV9zaG91bGREaXNjYXJkUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAgICBp
ZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHNraXBSZWNlaXZlZEJ1ZmZl
cihtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsgLy8gU2F2ZSBtZW1vcnkuCisgICAgbV9kZWZsYXRl
RnJhbWVyLmRpZEZhaWwoKTsKKyAgICBtX2hhc0NvbnRpbnVvdXNGcmFtZSA9IGZhbHNlOworICAg
IG1fY29udGludW91c0ZyYW1lRGF0YS5jbGVhcigpOworCisgICAgbV9jaGFubmVsLmRpZFJlY2Vp
dmVNZXNzYWdlRXJyb3IocmVhc29uKTsKKyAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJTb2NrZXRD
aGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUsIHsg
fSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkQ2xvc2UoaW50MzJfdCBjb2RlLCBjb25z
dCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBkZXN0cnVjdFN0cmVhbSgpOworCisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9
IFN0YXRlOjpDbG9zZWQ7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb2RlLCByZWFz
b25dIHsKKyAgICAgICAgbV9jaGFubmVsLmRpZENsb3NlKGNvZGUsIHJlYXNvbik7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGVzdHJ1Y3RTdHJlYW0oKQoreworICAgIGlmIChp
c1N0cmVhbUludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2NoZWR1bGVy
LmRlc3Ryb3lTdHJlYW0obV9zdHJlYW1JRCk7CisgICAgbV9zdHJlYW1JRCA9IFdlYkNvcmU6Omlu
dmFsaWRDdXJsU3RyZWFtSUQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tDdXJsLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5MmY0ZTE0YzI2ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9XZWJTb2Nr
ZXRUYXNrQ3VybC5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldlYlNvY2tldFRh
c2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0N1cmxTdHJlYW0uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hhbm5lbC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvV2ViU29ja2V0SGFuZHNoYWtlLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25I
YW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEN1cmxTdHJlYW1TY2hlZHVsZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrU29ja2V0Q2hhbm5lbDsKK3N0cnVjdCBT
ZXNzaW9uU2V0OworCitjbGFzcyBXZWJTb2NrZXRUYXNrIDogcHVibGljIFdlYkNvcmU6OkN1cmxT
dHJlYW06OkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOworICAgIH5XZWJTb2NrZXRU
YXNrKCk7CisKKyAgICB2b2lkIHNlbmRTdHJpbmcoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmREYXRhKGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9p
ZCBjbG9zZShpbnQzMl90IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKKworICAgIHZvaWQg
Y2FuY2VsKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIFNlc3Npb25TZXQqIHNlc3Npb25T
ZXQoKSB7IHJldHVybiBudWxscHRyOyB9CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBTdGF0
ZSB7CisgICAgICAgIENvbm5lY3RpbmcsCisgICAgICAgIEhhbmRzaGFraW5nLAorICAgICAgICBP
cGVuZWQsCisgICAgICAgIENsb3NpbmcsCisgICAgICAgIENsb3NlZAorICAgIH07CisKKyAgICB2
b2lkIGRpZE9wZW4oV2ViQ29yZTo6Q3VybFN0cmVhbUlEKSBmaW5hbDsKKyAgICB2b2lkIGRpZFNl
bmREYXRhKFdlYkNvcmU6OkN1cmxTdHJlYW1JRCwgc2l6ZV90KSBmaW5hbCB7IH07CisgICAgdm9p
ZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpDdXJsU3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlciYpIGZpbmFsOworICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpDdXJsU3RyZWFt
SUQsIENVUkxjb2RlKSBmaW5hbDsKKworICAgIGJvb2wgYXBwZW5kUmVjZWl2ZWRCdWZmZXIoY29u
c3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJik7CisgICAgdm9pZCBza2lwUmVjZWl2ZWRCdWZmZXIo
c2l6ZV90IGxlbik7CisKKyAgICBFeHBlY3RlZDxib29sLCBTdHJpbmc+IHZhbGlkYXRlT3Blbmlu
Z0hhbmRzaGFrZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiByZWNlaXZlRnJhbWVzKEZ1
bmN0aW9uPHZvaWQoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSwgY29uc3QgdWludDhf
dCosIHNpemVfdCk+JiYpOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiB2YWxpZGF0ZUZyYW1l
KGNvbnN0IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lJik7CisKKyAgICBib29sIHNlbmRGcmFtZShX
ZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3QgZGF0YUxlbmd0aCk7CisgICAgdm9pZCBzZW5kQ2xvc2luZ0hhbmRzaGFrZUlmTmVlZGVkKGlu
dDMyX3QsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKKworICAgIHZvaWQgZGlkRmFpbChjb25zdCBT
dHJpbmcmIHJlYXNvbik7CisgICAgdm9pZCBkaWRDbG9zZShpbnQzMl90IGNvZGUsIGNvbnN0IFN0
cmluZyYgcmVhc29uKTsKKworICAgIGJvb2wgaXNTdHJlYW1JbnZhbGlkYXRlZCgpIHsgcmV0dXJu
IG1fc3RyZWFtSUQgPT0gV2ViQ29yZTo6aW52YWxpZEN1cmxTdHJlYW1JRDsgfQorICAgIHZvaWQg
ZGVzdHJ1Y3RTdHJlYW0oKTsKKworICAgIE5ldHdvcmtTb2NrZXRDaGFubmVsJiBtX2NoYW5uZWw7
CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICBTdHJpbmcgbV9w
cm90b2NvbDsKKworICAgIFdlYkNvcmU6OkN1cmxTdHJlYW1TY2hlZHVsZXImIG1fc2NoZWR1bGVy
OworICAgIFdlYkNvcmU6OkN1cmxTdHJlYW1JRCBtX3N0cmVhbUlEIHsgV2ViQ29yZTo6aW52YWxp
ZEN1cmxTdHJlYW1JRCB9OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpDb25uZWN0aW5n
IH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlPiBt
X2hhbmRzaGFrZTsKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXREZWZsYXRlRnJhbWVyIG1fZGVmbGF0
ZUZyYW1lcjsKKworICAgIGJvb2wgbV9kaWRDb21wbGV0ZU9wZW5pbmdIYW5kc2hha2UgeyBmYWxz
ZSB9OworCisgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRSZWNlaXZlZERhdGEgeyBmYWxzZSB9Owor
ICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlY2VpdmVCdWZmZXI7CisKKyAgICBib29sIG1faGFzQ29u
dGludW91c0ZyYW1lIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BD
b2RlIG1fY29udGludW91c0ZyYW1lT3BDb2RlIHsgV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9w
Q29kZTo6T3BDb2RlSW52YWxpZCB9OworICAgIFZlY3Rvcjx1aW50OF90PiBtX2NvbnRpbnVvdXNG
cmFtZURhdGE7CisKKyAgICBib29sIG1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlIHsgZmFsc2Ug
fTsKKyAgICBpbnQzMl90IG1fY2xvc2VFdmVudENvZGUgeyBXZWJDb3JlOjpXZWJTb2NrZXRDaGFu
bmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVOb3RTcGVjaWZpZWQgfTsKKyAgICBT
dHJpbmcgbV9jbG9zZUV2ZW50UmVhc29uOworCisgICAgYm9vbCBtX2RpZFNlbmRDbG9zaW5nSGFu
ZHNoYWtlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVjZWl2ZWREaWRGYWlsIHsgZmFsc2UgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBsYXlTdGF0
aW9uLmNtYWtlCmluZGV4IDlhMmFlMmMxYWU3NC4uYzViMzhiMzkwZTNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC00OCw2ICs0OCw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1
cmwuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc01haW5DdXJsLmNw
cAogICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAorICAgIE5l
dHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwCiAKICAgICBQbGF0Zm9ybS9J
UEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGJhNDFjYzRiOGQzYy4uMzlm
M2UwMmQ5MGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTI1LDggKzI1LDYgQEAgbGlz
dChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9j
ZXNzTWFpbkN1cmwuY3BwCi0KICAgICBQbGF0Zm9ybS9JUEMvd2luL0F0dGFjaG1lbnRXaW4uY3Bw
CiAgICAgUGxhdGZvcm0vSVBDL3dpbi9Db25uZWN0aW9uV2luLmNwcAogICAgIFBsYXRmb3JtL0lQ
Qy93aW4vSVBDU2VtYXBob3JlV2luLmNwcApAQCAtNTgsOSArNTYsNiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLVmlld3BvcnRBdHRyaWJ1dGVz
LmNwcAogCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmNw
cAotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuY3Bw
Ci0KICAgICBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5jcHAKIAogICAgIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNw
cApAQCAtMTc1LDcgKzE3MCw5IEBAIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQogCiAg
ICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAKICAgICAg
ICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCisgICAgICAgIE5l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKICAgICAgICAgTmV0
d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCisgICAgICAgIE5ldHdvcmtQ
cm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwCiAKICAgICAgICAgU2hhcmVkL0FQSS9j
L2NhaXJvL1dLSW1hZ2VDYWlyby5jcHAKIApAQCAtMTg1LDYgKzE4Miw5IEBAIGlmICgke1dURl9Q
TEFURk9STV9XSU5fQ0FJUk99KQogCiAgICAgICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJv
L1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCiAKKyAgICAgICAgVUlQcm9jZXNzL0FQSS9D
L2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmNwcAorICAgICAgICBVSVByb2Nlc3MvQVBJL0Mv
Y3VybC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmNwcAorCiAgICAgICAgIFVJUHJvY2Vzcy9j
YWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIAogICAgICAgICBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2N1cmwvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454069</attachid>
            <date>2022-03-07 20:49:04 -0800</date>
            <delta_ts>2022-03-09 14:07:48 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-237579.diff</filename>
            <type>text/plain</type>
            <size>27294</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDNiZDJjMTBlN2ZiMC4uODI5NGY1
ZThkM2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTUzLDcgKzUzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+
IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQsIFNvY2tldFByb3ZpZGVyJiBwcm92aWRlcikK
IHsKLSNpZiBVU0UoU09VUCkKKyNpZiBVU0UoU09VUCkgfHwgVVNFKENVUkwpCiAgICAgYXV0byBj
aGFubmVsID0gcHJvdmlkZXIuY3JlYXRlV2ViU29ja2V0Q2hhbm5lbChkb2N1bWVudCwgY2xpZW50
KTsKICAgICBBU1NFUlQoY2hhbm5lbCk7CiAgICAgcmV0dXJuIGNoYW5uZWwucmVsZWFzZU5vbk51
bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0
VGFzay5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTb2NrZXRUYXNrLmgKaW5k
ZXggMzA5YmFiNDI1N2IwLi5kNjFlNjdkYzM0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiV2Vi
U29ja2V0VGFza0NvY29hLmgiCiAjZWxpZiBVU0UoU09VUCkKICNpbmNsdWRlICJXZWJTb2NrZXRU
YXNrU291cC5oIgorI2VsaWYgVVNFKENVUkwpCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwu
aCIKICNlbHNlCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCmlu
ZGV4IDAwMTIxZWFiOGNmMC4uODkyZDFiMjU0MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
b2tpZUphckRCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ29udGV4dC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC01OCw0ICs1OSw5IEBAIE5ldHdv
cmtTZXNzaW9uQ3VybDo6fk5ldHdvcmtTZXNzaW9uQ3VybCgpCiAKIH0KIAorc3RkOjp1bmlxdWVf
cHRyPFdlYlNvY2tldFRhc2s+IE5ldHdvcmtTZXNzaW9uQ3VybDo6Y3JlYXRlV2ViU29ja2V0VGFz
ayhXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBib29sKQoreworICAgIHJldHVy
biBtYWtlVW5pcXVlPFdlYlNvY2tldFRhc2s+KGNoYW5uZWwsIHJlcXVlc3QsIHByb3RvY29sKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKaW5kZXggZmUxNjc1NjAyMzhl
Li45ZGNkYjA1YWI5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKQEAgLTM5LDYgKzM5LDkgQEAgcHVibGljOgog
ICAgIH0KICAgICBOZXR3b3JrU2Vzc2lvbkN1cmwoTmV0d29ya1Byb2Nlc3MmLCBjb25zdCBOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIH5OZXR3b3JrU2Vzc2lvbkN1cmwo
KTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0VGFzaz4gY3JlYXRl
V2ViU29ja2V0VGFzayhXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5l
bCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIGJvb2wpIGZpbmFsOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tDdXJsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjBmMTUwOGNkNDFkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9XZWJTb2NrZXRUYXNrQ3VybC5jcHAKQEAgLTAsMCAr
MSw0MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlNvY2tldFRhc2tDdXJsLmgiCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiTmV0d29ya1NvY2tldENoYW5uZWwuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ3VybFN0cmVhbVNjaGVkdWxlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TYW1lU2l0ZUluZm8uaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvY2tldFRhc2s6OldlYlNvY2tldFRhc2soTmV0d29ya1Nv
Y2tldENoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAgICA6IG1fY2hhbm5lbChjaGFubmVsKQor
ICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX3Byb3RvY29s
KHByb3RvY29sKQorICAgICwgbV9zY2hlZHVsZXIoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnN0cmVhbVNjaGVkdWxlcigpKQoreworICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXMoIndzcyIpICYmIFdlYkNvcmU6OkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6YWxsb3dz
QW55U1NMQ2VydGlmaWNhdGUoKSkKKyAgICAgICAgV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnNzbEhhbmRsZSgpLnNldElnbm9yZVNTTEVycm9ycyh0cnVlKTsKKworICAgIG1fc3Ry
ZWFtSUQgPSBtX3NjaGVkdWxlci5jcmVhdGVTdHJlYW0ocmVxdWVzdC51cmwoKSwgKnRoaXMpOwor
ICAgIG1fY2hhbm5lbC5kaWRTZW5kSGFuZHNoYWtlUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QobV9yZXF1ZXN0KSk7Cit9CisKK1dlYlNvY2tldFRhc2s6On5XZWJTb2NrZXRUYXNrKCkK
K3sKKyAgICBkZXN0cnVjdFN0cmVhbSgpOworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRT
dHJpbmcoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiB1dGY4LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW5lZCkg
eworICAgICAgICBpZiAoIXNlbmRGcmFtZShXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2Rl
VGV4dCwgdXRmOC5kYXRhKCksIHV0Zjguc2l6ZSgpKSkKKyAgICAgICAgICAgIGRpZEZhaWwoIkZh
aWxlZCB0byBzZW5kIFdlYlNvY2tldCBmcmFtZS4iKTsKKyAgICB9CisgICAgY2FsbGJhY2soKTsK
K30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpzZW5kRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbmVkKSB7CisgICAgICAgIGlmICghc2VuZEZyYW1lKFdl
YkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSkpCisgICAgICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJh
bWUuIik7CisgICAgfQorICAgIGNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6
Y2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6Q29ubmVjdGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpIYW5kc2hha2luZykg
eworICAgICAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50
Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUsIHsgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzZW5kQ2xvc2luZ0hhbmRzaGFrZUlmTmVlZGVkKGNvZGUsIHJlYXNv
bik7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2FuY2VsKCkKK3sKKworfQorCit2b2lkIFdl
YlNvY2tldFRhc2s6OnJlc3VtZSgpCit7CisKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRP
cGVuKFdlYkNvcmU6OkN1cmxTdHJlYW1JRCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
Q29ubmVjdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpIYW5k
c2hha2luZzsKKworICAgIG1faGFuZHNoYWtlID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpXZWJTb2Nr
ZXRIYW5kc2hha2U+KG1fcmVxdWVzdC51cmwoKSwgbV9wcm90b2NvbCwgbV9yZXF1ZXN0Lmh0dHBV
c2VyQWdlbnQoKSwgbV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVy
TmFtZTo6T3JpZ2luKSwgbV9yZXF1ZXN0LmFsbG93Q29va2llcygpLCBmYWxzZSk7CisgICAgbV9o
YW5kc2hha2UtPnJlc2V0KCk7CisgICAgbV9oYW5kc2hha2UtPmFkZEV4dGVuc2lvblByb2Nlc3Nv
cihtX2RlZmxhdGVGcmFtZXIuY3JlYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKCkpOworCisgICAgYXV0
byBtZXNzYWdlID0gbV9oYW5kc2hha2UtPmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKTsKKyAgICBT
dHJpbmcgaGFuZHNoYWtlTWVzc2FnZShtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5sZW5ndGgoKSk7
CisKKyAgICBpZiAobV9yZXF1ZXN0LmFsbG93Q29va2llcygpKSB7CisgICAgICAgIGF1dG8gaW5j
bHVkZVNlY3VyZUNvb2tpZXMgPSBtX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJcygid3NzIikgPyBX
ZWJDb3JlOjpJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzIDogV2ViQ29yZTo6SW5jbHVkZVNlY3Vy
ZUNvb2tpZXM6Ok5vOworICAgICAgICBTdHJpbmcgY29va2llSGVhZGVyRmllbGQgPSBtX2NoYW5u
ZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUobV9yZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIFdlYkNvcmU6OlNh
bWVTaXRlSW5mbzo6Y3JlYXRlKG1fcmVxdWVzdCksIG1fcmVxdWVzdC51cmwoKSwgc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBXZWJDb3JlOjpTaG91bGRB
c2tJVFA6OlllcywgV2ViQ29yZTo6U2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc6
Ok5vKS5maXJzdDsKKyAgICAgICAgaWYgKCFjb29raWVIZWFkZXJGaWVsZC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGhhbmRzaGFrZU1lc3NhZ2UucmVtb3ZlKGhhbmRzaGFrZU1lc3NhZ2UubGVu
Z3RoKCkgLSAyLCAyKTsgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hdGluZyAnXHJcbicKKyAgICAgICAg
ICAgIGhhbmRzaGFrZU1lc3NhZ2UuYXBwZW5kKCJDb29raWU6ICIpOworICAgICAgICAgICAgaGFu
ZHNoYWtlTWVzc2FnZS5hcHBlbmQoY29va2llSGVhZGVyRmllbGQpOworICAgICAgICAgICAgaGFu
ZHNoYWtlTWVzc2FnZS5hcHBlbmQoIlxyXG5cclxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhdXRvIGhhbmRzaGFrZURhdGEgPSBoYW5kc2hha2VNZXNzYWdlLnV0ZjgoKTsKKyAgICBhdXRv
IGJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTx1aW50OF90PihoYW5kc2hha2VEYXRhLmxlbmd0aCgp
KTsKKyAgICBtZW1jcHkoYnVmZmVyLmdldCgpLCBoYW5kc2hha2VEYXRhLmRhdGEoKSwgaGFuZHNo
YWtlRGF0YS5sZW5ndGgoKSk7CisKKyAgICBtX3NjaGVkdWxlci5zZW5kKG1fc3RyZWFtSUQsIFdU
Rk1vdmUoYnVmZmVyKSwgaGFuZHNoYWtlRGF0YS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViU29j
a2V0VGFzazo6ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6Q3VybFN0cmVhbUlELCBjb25zdCBXZWJD
b3JlOjpTaGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q29ubmVjdGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghYnVmZmVyLnNpemUoKSkgeworICAgICAgICBkaWRDbG9zZSgwLCB7IH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2hvdWxkRGlzY2FyZFJlY2VpdmVk
RGF0YSB8fCBtX3JlY2VpdmVkQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFhcHBlbmRSZWNlaXZlZEJ1ZmZlcihidWZmZXIpKSB7CisgICAgICAgIGRpZEZhaWwo
IlJhbiBvdXQgb2YgbWVtb3J5IHdoaWxlIHJlY2VpdmluZyBXZWJTb2NrZXQgZGF0YS4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0
ZU9wZW5pbmdIYW5kc2hha2UoKTsKKyAgICBpZiAoIXZhbGlkYXRlUmVzdWx0Lmhhc192YWx1ZSgp
KSB7CisgICAgICAgIGRpZEZhaWwodmFsaWRhdGVSZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVJlc3VsdC52YWx1ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGZyYW1lUmVzdWx0ID0gcmVjZWl2ZUZyYW1lcyhbdGhpc10oV2Vi
Q29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBvcENvZGUsIGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgc3dpdGNoIChvcENvZGUpIHsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGxlbmd0aCA/IFN0cmluZzo6ZnJvbVVURjgo
ZGF0YSwgbGVuZ3RoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNz
YWdlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBtX2NoYW5uZWwuZGlkUmVjZWl2ZVRl
eHQobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBk
aWRGYWlsKCJDb3VsZCBub3QgZGVjb2RlIGEgdGV4dCBmcmFtZSBhcyBVVEYtOC4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6V2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZUJpbmFyeToKKyAgICAgICAgICAgIG1fY2hhbm5lbC5kaWRSZWNl
aXZlQmluYXJ5RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVu
Z3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6Ok9wQ29kZUNsb3NlOgorICAgICAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
ICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNs
b3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29kZU5vU3RhdHVzUmN2ZDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9
IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29k
ZUFibm9ybWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAgICBkaWRGYWlsKCJSZWNlaXZlZCBhIGJy
b2tlbiBjbG9zZSBmcmFtZSBjb250YWluaW5nIGFuIGludmFsaWQgc2l6ZSBib2R5LiIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBoaWdoQnl0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRh
dGFbMF0pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbG93Qnl0ZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGRhdGFbMV0pOworICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVu
dENvZGUgPSBoaWdoQnl0ZSA8PCA4IHwgbG93Qnl0ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9j
bG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29k
ZTo6Q2xvc2VFdmVudENvZGVOb1N0YXR1c1JjdmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbV9j
bG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29k
ZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUKKyAgICAgICAgICAgICAgICAgICAgfHwg
bV9jbG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50
Q29kZTo6Q2xvc2VFdmVudENvZGVUTFNIYW5kc2hha2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRD
b2RlOjpDbG9zZUV2ZW50Q29kZUFibm9ybWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGlkRmFpbCgiUmVjZWl2ZWQgYSBicm9rZW4gY2xvc2UgZnJhbWUgY29udGFpbmluZyBhIHJlc2Vy
dmVkIHN0YXR1cyBjb2RlLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA+PSAzKQor
ICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVudFJlYXNvbiA9IFN0cmluZzo6ZnJvbVVURjgoJmRh
dGFbMl0sIGxlbmd0aCAtIDIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
Y2xvc2VFdmVudFJlYXNvbiA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICAgICAgICAgIG1fcmVjZWl2
ZWRDbG9zaW5nSGFuZHNoYWtlID0gdHJ1ZTsKKyAgICAgICAgICAgIHNlbmRDbG9zaW5nSGFuZHNo
YWtlSWZOZWVkZWQobV9jbG9zZUV2ZW50Q29kZSwgbV9jbG9zZUV2ZW50UmVhc29uKTsKKyAgICAg
ICAgICAgIGRpZENsb3NlKG1fY2xvc2VFdmVudENvZGUsIG1fY2xvc2VFdmVudFJlYXNvbik7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYkNvcmU6OldlYlNvY2tldEZyYW1l
OjpPcENvZGVQaW5nOgorICAgICAgICAgICAgaWYgKCFzZW5kRnJhbWUoV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6Ok9wQ29kZVBvbmcsIGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgZGlk
RmFpbCgiRmFpbGVkIHRvIHNlbmQgV2ViU29ja2V0IGZyYW1lLiIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChmcmFtZVJlc3VsdCkgeworICAgICAg
ICBkaWRGYWlsKCpmcmFtZVJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChXZWJDb3JlOjpDdXJsU3RyZWFtSUQsIENVUkxjb2Rl
IGVycm9yQ29kZSkKK3sKKyAgICBkaWRGYWlsKG1ha2VTdHJpbmcoIldlYlNvY2tldCBuZXR3b3Jr
IGVycm9yOiBlcnJvciBjb2RlICIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihlcnJvckNvZGUpKSk7
Cit9CisKK2Jvb2wgV2ViU29ja2V0VGFzazo6YXBwZW5kUmVjZWl2ZWRCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgc2l6ZV90IG5ld0J1ZmZlclNpemUg
PSBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpICsgYnVmZmVyLnNpemUoKTsKKyAgICBpZiAobmV3QnVm
ZmVyU2l6ZSA8IG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fcmVjZWl2ZUJ1ZmZlci5hcHBlbmQoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6c2tpcFJlY2Vp
dmVkQnVmZmVyKHNpemVfdCBsZW5ndGgpCit7CisgICAgbWVtbW92ZShtX3JlY2VpdmVCdWZmZXIu
ZGF0YSgpLCBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpICsgbGVuZ3RoLCBtX3JlY2VpdmVCdWZmZXIu
c2l6ZSgpIC0gbGVuZ3RoKTsKKyAgICBtX3JlY2VpdmVCdWZmZXIuc2hyaW5rKG1fcmVjZWl2ZUJ1
ZmZlci5zaXplKCkgLSBsZW5ndGgpOworfQorCitFeHBlY3RlZDxib29sLCBTdHJpbmc+IFdlYlNv
Y2tldFRhc2s6OnZhbGlkYXRlT3BlbmluZ0hhbmRzaGFrZSgpCit7CisgICAgaWYgKG1fZGlkQ29t
cGxldGVPcGVuaW5nSGFuZHNoYWtlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICht
X3N0YXRlICE9IFN0YXRlOjpIYW5kc2hha2luZyB8fCAhbV9oYW5kc2hha2UgfHwgbV9oYW5kc2hh
a2UtPm1vZGUoKSAhPSBXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OkluY29tcGxldGUpIHsK
KyAgICAgICAgbV9oYW5kc2hha2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuZXhwZWN0ZWQgaGFuZHNoYWtlaW5nIGNvbmRpdGlvbiJfcyk7CisgICAgfQorCisg
ICAgYXV0byBoZWFkZXJMZW5ndGggPSBtX2hhbmRzaGFrZS0+cmVhZFNlcnZlckhhbmRzaGFrZSht
X3JlY2VpdmVCdWZmZXIuZGF0YSgpLCBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsKKyAgICBpZiAo
aGVhZGVyTGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNraXBSZWNl
aXZlZEJ1ZmZlcihoZWFkZXJMZW5ndGgpOworCisgICAgaWYgKG1faGFuZHNoYWtlLT5tb2RlKCkg
IT0gV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpDb25uZWN0ZWQpIHsKKyAgICAgICAgYXV0
byByZWFzb24gPSBtX2hhbmRzaGFrZS0+ZmFpbHVyZVJlYXNvbigpOworICAgICAgICBtX2hhbmRz
aGFrZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZWFzb24pOwor
ICAgIH0KKworICAgIFN0cmluZyBzZXJ2ZXJTZXRDb29raWUgPSBtX2hhbmRzaGFrZS0+c2VydmVy
U2V0Q29va2llKCk7CisgICAgaWYgKCFzZXJ2ZXJTZXRDb29raWUuaXNFbXB0eSgpKQorICAgICAg
ICBtX2NoYW5uZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29va2ll
c0Zyb21IVFRQUmVzcG9uc2UobV9yZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIG1fcmVx
dWVzdC51cmwoKSwgc2VydmVyU2V0Q29va2llKTsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3Bl
bmVkOworICAgIG1fZGlkQ29tcGxldGVPcGVuaW5nSGFuZHNoYWtlID0gdHJ1ZTsKKworICAgIG1f
Y2hhbm5lbC5kaWRDb25uZWN0KG1faGFuZHNoYWtlLT5zZXJ2ZXJXZWJTb2NrZXRQcm90b2NvbCgp
LCBtX2hhbmRzaGFrZS0+YWNjZXB0ZWRFeHRlbnNpb25zKCkpOworICAgIG1fY2hhbm5lbC5kaWRS
ZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZShtX2hhbmRz
aGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSkpOworCisgICAgbV9oYW5kc2hha2UgPSBu
dWxscHRyOworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gV2Vi
U29ja2V0VGFzazo6cmVjZWl2ZUZyYW1lcyhGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OldlYlNvY2tl
dEZyYW1lOjpPcENvZGUsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIGNhbGxiYWNrKQorewor
ICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpPcGVuZWQgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6Q2xv
c2luZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHdoaWxlIChtX3JlY2Vp
dmVCdWZmZXIuc2l6ZSgpICYmICFtX3Nob3VsZERpc2NhcmRSZWNlaXZlZERhdGEgJiYgIW1fcmVj
ZWl2ZWRDbG9zaW5nSGFuZHNoYWtlKSB7CisgICAgICAgIFdlYkNvcmU6OldlYlNvY2tldEZyYW1l
IGZyYW1lOworICAgICAgICBjb25zdCB1aW50OF90KiBmcmFtZUVuZDsKKyAgICAgICAgU3RyaW5n
IGVycm9yU3RyaW5nOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6OnBhcnNlRnJhbWUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9yZWNlaXZl
QnVmZmVyLmRhdGEoKSksIG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCksIGZyYW1lLCBmcmFtZUVuZCwg
ZXJyb3JTdHJpbmcpOworICAgICAgICBpZiAocGFyc2VSZXN1bHQgPT0gV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6OkZyYW1lSW5jb21wbGV0ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIGlmIChwYXJzZVJlc3VsdCA9PSBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6
RnJhbWVFcnJvcikKKyAgICAgICAgICAgIHJldHVybiBlcnJvclN0cmluZzsKKworICAgICAgICBh
dXRvIGluZmxhdGVSZXN1bHQgPSBtX2RlZmxhdGVGcmFtZXIuaW5mbGF0ZShmcmFtZSk7CisgICAg
ICAgIGlmICghaW5mbGF0ZVJlc3VsdC0+c3VjY2VlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4g
aW5mbGF0ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpOworCisgICAgICAgIGlmIChhdXRvIHZhbGlk
YXRlUmVzdWx0ID0gdmFsaWRhdGVGcmFtZShmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gKnZh
bGlkYXRlUmVzdWx0OworCisgICAgICAgIGlmICghZnJhbWUuZmluYWwgfHwgZnJhbWUub3BDb2Rl
ID09IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24pIHsKKyAgICAg
ICAgICAgIGlmIChmcmFtZS5vcENvZGUgIT0gV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZUNvbnRpbnVhdGlvbikgeworICAgICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IGZyYW1lLm9w
Q29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRh
LmFwcGVuZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKworICAgICAgICAg
ICAgaWYgKGZyYW1lLmZpbmFsKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9jb250aW51
b3VzRnJhbWVPcENvZGUsIG1fY29udGludW91c0ZyYW1lRGF0YS5kYXRhKCksIG1fY29udGludW91
c0ZyYW1lRGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1l
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRhLmNsZWFyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FsbGJhY2soZnJh
bWUub3BDb2RlLCBmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKworICAgICAg
ICBpZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBza2lwUmVjZWl2
ZWRCdWZmZXIoZnJhbWVFbmQgLSBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gV2ViU29j
a2V0VGFzazo6dmFsaWRhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZSYgZnJh
bWUpCit7CisgICAgaWYgKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc1Jlc2VydmVkT3BDb2Rl
KGZyYW1lLm9wQ29kZSkpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJVbnJlY29nbml6ZWQg
ZnJhbWUgb3Bjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWUub3BDb2RlKSk7CisK
KyAgICBpZiAoZnJhbWUucmVzZXJ2ZWQyIHx8IGZyYW1lLnJlc2VydmVkMykKKyAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIk9uZSBvciBtb3JlIHJlc2VydmVkIGJpdHMgYXJlIG9uOiByZXNlcnZl
ZDIgPSAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWUucmVzZXJ2ZWQyKSwgIiwgcmVzZXJ2
ZWQzID0gIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLnJlc2VydmVkMykpOworCisgICAg
aWYgKGZyYW1lLm1hc2tlZCkKKyAgICAgICAgcmV0dXJuICAiQSBzZXJ2ZXIgbXVzdCBub3QgbWFz
ayBhbnkgZnJhbWVzIHRoYXQgaXQgc2VuZHMgdG8gdGhlIGNsaWVudC4iX3M7CisKKyAgICAvLyBB
bGwgY29udHJvbCBmcmFtZXMgbXVzdCBub3QgYmUgZnJhZ21lbnRlZC4KKyAgICBpZiAoV2ViQ29y
ZTo6V2ViU29ja2V0RnJhbWU6OmlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmICFmcmFt
ZS5maW5hbCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlJlY2VpdmVkIGZyYWdtZW50ZWQg
Y29udHJvbCBmcmFtZTogb3Bjb2RlID0gIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLm9w
Q29kZSkpOworCisgICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3QgaGF2ZSBhIHBheWxvYWQg
b2YgMTI1IGJ5dGVzIG9yIGxlc3MsIHdoaWNoIG1lYW5zIHRoZSBmcmFtZSBtdXN0IG5vdCBjb250
YWluCisgICAgLy8gdGhlICJleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCIgZmllbGQuCisgICAgaWYg
KFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSAm
JiBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6bmVlZHNFeHRlbmRlZExlbmd0aEZpZWxkKGZyYW1l
LnBheWxvYWRMZW5ndGgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUmVjZWl2ZWQgY29u
dHJvbCBmcmFtZSBoYXZpbmcgdG9vIGxvbmcgcGF5bG9hZDogIiwgZnJhbWUucGF5bG9hZExlbmd0
aCwgIiBieXRlcyIpOworCisgICAgLy8gQSBuZXcgZGF0YSBmcmFtZSBpcyByZWNlaXZlZCBiZWZv
cmUgdGhlIHByZXZpb3VzIGNvbnRpbnVvdXMgZnJhbWUgZmluaXNoZXMuCisgICAgLy8gTm90ZSB0
aGF0IGNvbnRyb2wgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGNvbWUgaW4gdGhlIG1pZGRsZSBvZiBj
b250aW51b3VzIGZyYW1lcy4KKyAgICBpZiAobV9oYXNDb250aW51b3VzRnJhbWUgJiYgZnJhbWUu
b3BDb2RlICE9IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24gJiYg
IVdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSkK
KyAgICAgICAgcmV0dXJuICJSZWNlaXZlZCBuZXcgZGF0YSBmcmFtZSBidXQgcHJldmlvdXMgY29u
dGludW91cyBmcmFtZSBpcyB1bmZpbmlzaGVkLiJfczsKKworICAgIC8vIEFuIHVuZXhwZWN0ZWQg
Y29udGludWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVkIHdpdGhvdXQgYW55IGxlYWRpbmcgZnJhbWUu
CisgICAgaWYgKCFtX2hhc0NvbnRpbnVvdXNGcmFtZSAmJiBmcmFtZS5vcENvZGUgPT0gV2ViQ29y
ZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNvbnRpbnVhdGlvbikKKyAgICAgICAgcmV0dXJuICJS
ZWNlaXZlZCB1bmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZS4iX3M7CisKKyAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRDbG9zaW5nSGFuZHNo
YWtlSWZOZWVkZWQoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBp
ZiAobV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ1ZjsKKyAgICBpZiAoIW1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlICYm
IGNvZGUgIT0gV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGU6OkNsb3Nl
RXZlbnRDb2RlTm90U3BlY2lmaWVkKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGlnaEJ5dGUg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oY29kZSkgPj4gODsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBsb3dCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGNvZGUpOworICAg
ICAgICBidWYuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KGhpZ2hCeXRlKSk7CisgICAgICAgIGJ1
Zi5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4obG93Qnl0ZSkpOworICAgICAgICBhdXRvIHJlYXNv
blVURjggPSByZWFzb24udXRmOCgpOworICAgICAgICBidWYuYXBwZW5kKHJlYXNvblVURjguZGF0
YSgpLCByZWFzb25VVEY4Lmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBpZiAoIXNlbmRGcmFtZShX
ZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlQ2xvc2UsIGJ1Zi5kYXRhKCksIGJ1Zi5zaXpl
KCkpKQorICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWUuIik7
CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3Npbmc7CisgICAgbV9kaWRTZW5kQ2xvc2luZ0hh
bmRzaGFrZSA9IHRydWU7Cit9CisKK2Jvb2wgV2ViU29ja2V0VGFzazo6c2VuZEZyYW1lKFdlYkNv
cmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGUgb3BDb2RlLCBjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBpZiAobV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZSBmcmFt
ZShvcENvZGUsIHRydWUsIGZhbHNlLCB0cnVlLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKworICAgIGF1
dG8gZGVmbGF0ZVJlc3VsdCA9IG1fZGVmbGF0ZUZyYW1lci5kZWZsYXRlKGZyYW1lKTsKKyAgICBp
ZiAoIWRlZmxhdGVSZXN1bHQtPnN1Y2NlZWRlZCgpKSB7CisgICAgICAgIGRpZEZhaWwoZGVmbGF0
ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiBmcmFtZURhdGE7CisgICAgZnJhbWUubWFrZUZyYW1lRGF0
YShmcmFtZURhdGEpOworCisgICAgYXV0byBidWZmZXIgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhf
dD4oZnJhbWVEYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlci5nZXQoKSwgZnJhbWVEYXRh
LmRhdGEoKSwgZnJhbWVEYXRhLnNpemUoKSk7CisKKyAgICBtX3NjaGVkdWxlci5zZW5kKG1fc3Ry
ZWFtSUQsIFdURk1vdmUoYnVmZmVyKSwgZnJhbWVEYXRhLnNpemUoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChjb25zdCBTdHJpbmcmIHJlYXNv
bikKK3sKKyAgICBpZiAobV9yZWNlaXZlZERpZEZhaWwpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcmVjZWl2ZWREaWRGYWlsID0gdHJ1ZTsKKworICAgIC8vIEh5YmktMTAgc3BlY2lmaWNhdGlv
biBleHBsaWNpdGx5IHN0YXRlcyB3ZSBtdXN0IG5vdCBjb250aW51ZSB0byBoYW5kbGUgaW5jb21p
bmcgZGF0YQorICAgIC8vIG9uY2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGZhaWxlZCAo
c2VjdGlvbiA3LjEuNykuCisgICAgbV9zaG91bGREaXNjYXJkUmVjZWl2ZWREYXRhID0gdHJ1ZTsK
KyAgICBpZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHNraXBSZWNlaXZl
ZEJ1ZmZlcihtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsgLy8gU2F2ZSBtZW1vcnkuCisgICAgbV9k
ZWZsYXRlRnJhbWVyLmRpZEZhaWwoKTsKKyAgICBtX2hhc0NvbnRpbnVvdXNGcmFtZSA9IGZhbHNl
OworICAgIG1fY29udGludW91c0ZyYW1lRGF0YS5jbGVhcigpOworCisgICAgbV9jaGFubmVsLmRp
ZFJlY2VpdmVNZXNzYWdlRXJyb3IocmVhc29uKTsKKyAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1
cmUsIHsgfSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkQ2xvc2UoaW50MzJfdCBjb2Rl
LCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBkZXN0cnVjdFN0cmVhbSgpOworCisgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpDbG9zZWQ7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb2Rl
LCByZWFzb25dIHsKKyAgICAgICAgbV9jaGFubmVsLmRpZENsb3NlKGNvZGUsIHJlYXNvbik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGVzdHJ1Y3RTdHJlYW0oKQoreworICAg
IGlmIChpc1N0cmVhbUludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2No
ZWR1bGVyLmRlc3Ryb3lTdHJlYW0obV9zdHJlYW1JRCk7CisgICAgbV9zdHJlYW1JRCA9IFdlYkNv
cmU6OmludmFsaWRDdXJsU3RyZWFtSUQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tD
dXJsLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1
cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5MmY0ZTE0YzI2
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9X
ZWJTb2NrZXRUYXNrQ3VybC5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldlYlNv
Y2tldFRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0N1cmxTdHJlYW0uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hh
bm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0SGFuZHNoYWtlLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIEN1cmxTdHJlYW1TY2hlZHVsZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrU29ja2V0Q2hhbm5lbDsKK3N0
cnVjdCBTZXNzaW9uU2V0OworCitjbGFzcyBXZWJTb2NrZXRUYXNrIDogcHVibGljIFdlYkNvcmU6
OkN1cmxTdHJlYW06OkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOworICAgIH5XZWJT
b2NrZXRUYXNrKCk7CisKKyAgICB2b2lkIHNlbmRTdHJpbmcoY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmREYXRhKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBjbG9zZShpbnQzMl90IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKKworICAg
IHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIFNlc3Npb25TZXQqIHNl
c3Npb25TZXQoKSB7IHJldHVybiBudWxscHRyOyB9CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFz
cyBTdGF0ZSB7CisgICAgICAgIENvbm5lY3RpbmcsCisgICAgICAgIEhhbmRzaGFraW5nLAorICAg
ICAgICBPcGVuZWQsCisgICAgICAgIENsb3NpbmcsCisgICAgICAgIENsb3NlZAorICAgIH07CisK
KyAgICB2b2lkIGRpZE9wZW4oV2ViQ29yZTo6Q3VybFN0cmVhbUlEKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFNlbmREYXRhKFdlYkNvcmU6OkN1cmxTdHJlYW1JRCwgc2l6ZV90KSBmaW5hbCB7IH07Cisg
ICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpDdXJsU3RyZWFtSUQsIGNvbnN0IFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlciYpIGZpbmFsOworICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpDdXJs
U3RyZWFtSUQsIENVUkxjb2RlKSBmaW5hbDsKKworICAgIGJvb2wgYXBwZW5kUmVjZWl2ZWRCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJik7CisgICAgdm9pZCBza2lwUmVjZWl2ZWRC
dWZmZXIoc2l6ZV90IGxlbik7CisKKyAgICBFeHBlY3RlZDxib29sLCBTdHJpbmc+IHZhbGlkYXRl
T3BlbmluZ0hhbmRzaGFrZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiByZWNlaXZlRnJh
bWVzKEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSwgY29uc3Qg
dWludDhfdCosIHNpemVfdCk+JiYpOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiB2YWxpZGF0
ZUZyYW1lKGNvbnN0IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lJik7CisKKyAgICBib29sIHNlbmRG
cmFtZShXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlLCBjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YUxlbmd0aCk7CisgICAgdm9pZCBzZW5kQ2xvc2luZ0hhbmRzaGFrZUlmTmVl
ZGVkKGludDMyX3QsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKKworICAgIHZvaWQgZGlkRmFpbChj
b25zdCBTdHJpbmcmIHJlYXNvbik7CisgICAgdm9pZCBkaWRDbG9zZShpbnQzMl90IGNvZGUsIGNv
bnN0IFN0cmluZyYgcmVhc29uKTsKKworICAgIGJvb2wgaXNTdHJlYW1JbnZhbGlkYXRlZCgpIHsg
cmV0dXJuIG1fc3RyZWFtSUQgPT0gV2ViQ29yZTo6aW52YWxpZEN1cmxTdHJlYW1JRDsgfQorICAg
IHZvaWQgZGVzdHJ1Y3RTdHJlYW0oKTsKKworICAgIE5ldHdvcmtTb2NrZXRDaGFubmVsJiBtX2No
YW5uZWw7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICBTdHJp
bmcgbV9wcm90b2NvbDsKKworICAgIFdlYkNvcmU6OkN1cmxTdHJlYW1TY2hlZHVsZXImIG1fc2No
ZWR1bGVyOworICAgIFdlYkNvcmU6OkN1cmxTdHJlYW1JRCBtX3N0cmVhbUlEIHsgV2ViQ29yZTo6
aW52YWxpZEN1cmxTdHJlYW1JRCB9OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpDb25u
ZWN0aW5nIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6V2ViU29ja2V0SGFuZHNo
YWtlPiBtX2hhbmRzaGFrZTsKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXREZWZsYXRlRnJhbWVyIG1f
ZGVmbGF0ZUZyYW1lcjsKKworICAgIGJvb2wgbV9kaWRDb21wbGV0ZU9wZW5pbmdIYW5kc2hha2Ug
eyBmYWxzZSB9OworCisgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRSZWNlaXZlZERhdGEgeyBmYWxz
ZSB9OworICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlY2VpdmVCdWZmZXI7CisKKyAgICBib29sIG1f
aGFzQ29udGludW91c0ZyYW1lIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXRGcmFt
ZTo6T3BDb2RlIG1fY29udGludW91c0ZyYW1lT3BDb2RlIHsgV2ViQ29yZTo6V2ViU29ja2V0RnJh
bWU6Ok9wQ29kZTo6T3BDb2RlSW52YWxpZCB9OworICAgIFZlY3Rvcjx1aW50OF90PiBtX2NvbnRp
bnVvdXNGcmFtZURhdGE7CisKKyAgICBib29sIG1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlIHsg
ZmFsc2UgfTsKKyAgICBpbnQzMl90IG1fY2xvc2VFdmVudENvZGUgeyBXZWJDb3JlOjpXZWJTb2Nr
ZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVOb3RTcGVjaWZpZWQgfTsK
KyAgICBTdHJpbmcgbV9jbG9zZUV2ZW50UmVhc29uOworCisgICAgYm9vbCBtX2RpZFNlbmRDbG9z
aW5nSGFuZHNoYWtlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVjZWl2ZWREaWRGYWlsIHsgZmFs
c2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBs
YXlTdGF0aW9uLmNtYWtlCmluZGV4IDlhMmFlMmMxYWU3NC4uYzViMzhiMzkwZTNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC00OCw2ICs0OCw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJv
Y2Vzc0N1cmwuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc01haW5D
dXJsLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAor
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwCiAKICAgICBQbGF0
Zm9ybS9JUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGJhNDFjYzRiOGQz
Yy4uMzlmM2UwMmQ5MGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTI1LDggKzI1LDYg
QEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdv
cmtQcm9jZXNzTWFpbkN1cmwuY3BwCi0KICAgICBQbGF0Zm9ybS9JUEMvd2luL0F0dGFjaG1lbnRX
aW4uY3BwCiAgICAgUGxhdGZvcm0vSVBDL3dpbi9Db25uZWN0aW9uV2luLmNwcAogICAgIFBsYXRm
b3JtL0lQQy93aW4vSVBDU2VtYXBob3JlV2luLmNwcApAQCAtNTgsOSArNTYsNiBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLVmlld3BvcnRBdHRy
aWJ1dGVzLmNwcAogCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VD
dXJsLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1
cmwuY3BwCi0KICAgICBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5jcHAKIAogICAgIFVJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBo
aWNzLmNwcApAQCAtMTc1LDcgKzE3MCw5IEBAIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99
KQogCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAK
ICAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCisgICAg
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKICAgICAg
ICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCisgICAgICAgIE5l
dHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwCiAKICAgICAgICAgU2hhcmVk
L0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5jcHAKIApAQCAtMTg1LDYgKzE4Miw5IEBAIGlmICgk
e1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQogCiAgICAgICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9u
L2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCiAKKyAgICAgICAgVUlQcm9jZXNz
L0FQSS9DL2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmNwcAorICAgICAgICBVSVByb2Nlc3Mv
QVBJL0MvY3VybC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmNwcAorCiAgICAgICAgIFVJUHJv
Y2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIAogICAgICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2N1cmwvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454282</attachid>
            <date>2022-03-09 14:07:48 -0800</date>
            <delta_ts>2022-03-10 12:10:35 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-237579.diff</filename>
            <type>text/plain</type>
            <size>26288</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDNiZDJjMTBlN2ZiMC4uODI5NGY1
ZThkM2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTUzLDcgKzUzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+
IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQsIFNvY2tldFByb3ZpZGVyJiBwcm92aWRlcikK
IHsKLSNpZiBVU0UoU09VUCkKKyNpZiBVU0UoU09VUCkgfHwgVVNFKENVUkwpCiAgICAgYXV0byBj
aGFubmVsID0gcHJvdmlkZXIuY3JlYXRlV2ViU29ja2V0Q2hhbm5lbChkb2N1bWVudCwgY2xpZW50
KTsKICAgICBBU1NFUlQoY2hhbm5lbCk7CiAgICAgcmV0dXJuIGNoYW5uZWwucmVsZWFzZU5vbk51
bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0
VGFzay5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTb2NrZXRUYXNrLmgKaW5k
ZXggMzA5YmFiNDI1N2IwLi5kNjFlNjdkYzM0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiV2Vi
U29ja2V0VGFza0NvY29hLmgiCiAjZWxpZiBVU0UoU09VUCkKICNpbmNsdWRlICJXZWJTb2NrZXRU
YXNrU291cC5oIgorI2VsaWYgVVNFKENVUkwpCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwu
aCIKICNlbHNlCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCmlu
ZGV4IDAwMTIxZWFiOGNmMC4uODkyZDFiMjU0MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
b2tpZUphckRCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ29udGV4dC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC01OCw0ICs1OSw5IEBAIE5ldHdv
cmtTZXNzaW9uQ3VybDo6fk5ldHdvcmtTZXNzaW9uQ3VybCgpCiAKIH0KIAorc3RkOjp1bmlxdWVf
cHRyPFdlYlNvY2tldFRhc2s+IE5ldHdvcmtTZXNzaW9uQ3VybDo6Y3JlYXRlV2ViU29ja2V0VGFz
ayhXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBib29sKQoreworICAgIHJldHVy
biBtYWtlVW5pcXVlPFdlYlNvY2tldFRhc2s+KGNoYW5uZWwsIHJlcXVlc3QsIHByb3RvY29sKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKaW5kZXggZmUxNjc1NjAyMzhl
Li45ZGNkYjA1YWI5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKQEAgLTM5LDYgKzM5LDkgQEAgcHVibGljOgog
ICAgIH0KICAgICBOZXR3b3JrU2Vzc2lvbkN1cmwoTmV0d29ya1Byb2Nlc3MmLCBjb25zdCBOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIH5OZXR3b3JrU2Vzc2lvbkN1cmwo
KTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0VGFzaz4gY3JlYXRl
V2ViU29ja2V0VGFzayhXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5l
bCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIGJvb2wpIGZpbmFsOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tDdXJsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjBmMTUwOGNkNDFkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9XZWJTb2NrZXRUYXNrQ3VybC5jcHAKQEAgLTAsMCAr
MSw0MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlNvY2tldFRhc2tDdXJsLmgiCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiTmV0d29ya1NvY2tldENoYW5uZWwuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ3VybFN0cmVhbVNjaGVkdWxlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TYW1lU2l0ZUluZm8uaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvY2tldFRhc2s6OldlYlNvY2tldFRhc2soTmV0d29ya1Nv
Y2tldENoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAgICA6IG1fY2hhbm5lbChjaGFubmVsKQor
ICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX3Byb3RvY29s
KHByb3RvY29sKQorICAgICwgbV9zY2hlZHVsZXIoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnN0cmVhbVNjaGVkdWxlcigpKQoreworICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXMoIndzcyIpICYmIFdlYkNvcmU6OkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6YWxsb3dz
QW55U1NMQ2VydGlmaWNhdGUoKSkKKyAgICAgICAgV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnNzbEhhbmRsZSgpLnNldElnbm9yZVNTTEVycm9ycyh0cnVlKTsKKworICAgIG1fc3Ry
ZWFtSUQgPSBtX3NjaGVkdWxlci5jcmVhdGVTdHJlYW0ocmVxdWVzdC51cmwoKSwgKnRoaXMpOwor
ICAgIG1fY2hhbm5lbC5kaWRTZW5kSGFuZHNoYWtlUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QobV9yZXF1ZXN0KSk7Cit9CisKK1dlYlNvY2tldFRhc2s6On5XZWJTb2NrZXRUYXNrKCkK
K3sKKyAgICBkZXN0cnVjdFN0cmVhbSgpOworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRT
dHJpbmcoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiB1dGY4LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW5lZCkg
eworICAgICAgICBpZiAoIXNlbmRGcmFtZShXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2Rl
VGV4dCwgdXRmOC5kYXRhKCksIHV0Zjguc2l6ZSgpKSkKKyAgICAgICAgICAgIGRpZEZhaWwoIkZh
aWxlZCB0byBzZW5kIFdlYlNvY2tldCBmcmFtZS4iKTsKKyAgICB9CisgICAgY2FsbGJhY2soKTsK
K30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpzZW5kRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbmVkKSB7CisgICAgICAgIGlmICghc2VuZEZyYW1lKFdl
YkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSkpCisgICAgICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJh
bWUuIik7CisgICAgfQorICAgIGNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6
Y2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6Q29ubmVjdGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpIYW5kc2hha2luZykg
eworICAgICAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50
Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUsIHsgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzZW5kQ2xvc2luZ0hhbmRzaGFrZUlmTmVlZGVkKGNvZGUsIHJlYXNv
bik7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2FuY2VsKCkKK3sKKworfQorCit2b2lkIFdl
YlNvY2tldFRhc2s6OnJlc3VtZSgpCit7CisKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRP
cGVuKFdlYkNvcmU6OkN1cmxTdHJlYW1JRCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
Q29ubmVjdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpIYW5k
c2hha2luZzsKKworICAgIG1faGFuZHNoYWtlID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpXZWJTb2Nr
ZXRIYW5kc2hha2U+KG1fcmVxdWVzdC51cmwoKSwgbV9wcm90b2NvbCwgbV9yZXF1ZXN0Lmh0dHBV
c2VyQWdlbnQoKSwgbV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVy
TmFtZTo6T3JpZ2luKSwgbV9yZXF1ZXN0LmFsbG93Q29va2llcygpLCBmYWxzZSk7CisgICAgbV9o
YW5kc2hha2UtPnJlc2V0KCk7CisgICAgbV9oYW5kc2hha2UtPmFkZEV4dGVuc2lvblByb2Nlc3Nv
cihtX2RlZmxhdGVGcmFtZXIuY3JlYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKCkpOworCisgICAgYXV0
byBtZXNzYWdlID0gbV9oYW5kc2hha2UtPmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKTsKKyAgICBT
dHJpbmcgaGFuZHNoYWtlTWVzc2FnZShtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5sZW5ndGgoKSk7
CisKKyAgICBpZiAobV9yZXF1ZXN0LmFsbG93Q29va2llcygpKSB7CisgICAgICAgIGF1dG8gaW5j
bHVkZVNlY3VyZUNvb2tpZXMgPSBtX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJcygid3NzIikgPyBX
ZWJDb3JlOjpJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzIDogV2ViQ29yZTo6SW5jbHVkZVNlY3Vy
ZUNvb2tpZXM6Ok5vOworICAgICAgICBTdHJpbmcgY29va2llSGVhZGVyRmllbGQgPSBtX2NoYW5u
ZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUobV9yZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIFdlYkNvcmU6OlNh
bWVTaXRlSW5mbzo6Y3JlYXRlKG1fcmVxdWVzdCksIG1fcmVxdWVzdC51cmwoKSwgc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBXZWJDb3JlOjpTaG91bGRB
c2tJVFA6OlllcywgV2ViQ29yZTo6U2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc6
Ok5vKS5maXJzdDsKKyAgICAgICAgaWYgKCFjb29raWVIZWFkZXJGaWVsZC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGhhbmRzaGFrZU1lc3NhZ2UucmVtb3ZlKGhhbmRzaGFrZU1lc3NhZ2UubGVu
Z3RoKCkgLSAyLCAyKTsgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hdGluZyAnXHJcbicKKyAgICAgICAg
ICAgIGhhbmRzaGFrZU1lc3NhZ2UuYXBwZW5kKCJDb29raWU6ICIpOworICAgICAgICAgICAgaGFu
ZHNoYWtlTWVzc2FnZS5hcHBlbmQoY29va2llSGVhZGVyRmllbGQpOworICAgICAgICAgICAgaGFu
ZHNoYWtlTWVzc2FnZS5hcHBlbmQoIlxyXG5cclxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhdXRvIGhhbmRzaGFrZURhdGEgPSBoYW5kc2hha2VNZXNzYWdlLnV0ZjgoKTsKKyAgICBhdXRv
IGJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTx1aW50OF90PihoYW5kc2hha2VEYXRhLmxlbmd0aCgp
KTsKKyAgICBtZW1jcHkoYnVmZmVyLmdldCgpLCBoYW5kc2hha2VEYXRhLmRhdGEoKSwgaGFuZHNo
YWtlRGF0YS5sZW5ndGgoKSk7CisKKyAgICBtX3NjaGVkdWxlci5zZW5kKG1fc3RyZWFtSUQsIFdU
Rk1vdmUoYnVmZmVyKSwgaGFuZHNoYWtlRGF0YS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViU29j
a2V0VGFzazo6ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6Q3VybFN0cmVhbUlELCBjb25zdCBXZWJD
b3JlOjpTaGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q29ubmVjdGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghYnVmZmVyLnNpemUoKSkgeworICAgICAgICBkaWRDbG9zZSgwLCB7IH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2hvdWxkRGlzY2FyZFJlY2VpdmVk
RGF0YSB8fCBtX3JlY2VpdmVkQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFhcHBlbmRSZWNlaXZlZEJ1ZmZlcihidWZmZXIpKSB7CisgICAgICAgIGRpZEZhaWwo
IlJhbiBvdXQgb2YgbWVtb3J5IHdoaWxlIHJlY2VpdmluZyBXZWJTb2NrZXQgZGF0YS4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0
ZU9wZW5pbmdIYW5kc2hha2UoKTsKKyAgICBpZiAoIXZhbGlkYXRlUmVzdWx0Lmhhc192YWx1ZSgp
KSB7CisgICAgICAgIGRpZEZhaWwodmFsaWRhdGVSZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVJlc3VsdC52YWx1ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGZyYW1lUmVzdWx0ID0gcmVjZWl2ZUZyYW1lcyhbdGhpc10oV2Vi
Q29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBvcENvZGUsIGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgc3dpdGNoIChvcENvZGUpIHsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGxlbmd0aCA/IFN0cmluZzo6ZnJvbVVURjgo
ZGF0YSwgbGVuZ3RoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNz
YWdlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBtX2NoYW5uZWwuZGlkUmVjZWl2ZVRl
eHQobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBk
aWRGYWlsKCJDb3VsZCBub3QgZGVjb2RlIGEgdGV4dCBmcmFtZSBhcyBVVEYtOC4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6V2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZUJpbmFyeToKKyAgICAgICAgICAgIG1fY2hhbm5lbC5kaWRSZWNl
aXZlQmluYXJ5RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVu
Z3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6Ok9wQ29kZUNsb3NlOgorICAgICAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
ICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNs
b3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29kZU5vU3RhdHVzUmN2ZDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9
IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29k
ZUFibm9ybWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAgICBkaWRGYWlsKCJSZWNlaXZlZCBhIGJy
b2tlbiBjbG9zZSBmcmFtZSBjb250YWluaW5nIGFuIGludmFsaWQgc2l6ZSBib2R5LiIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBoaWdoQnl0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRh
dGFbMF0pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbG93Qnl0ZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGRhdGFbMV0pOworICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVu
dENvZGUgPSBoaWdoQnl0ZSA8PCA4IHwgbG93Qnl0ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9j
bG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29k
ZTo6Q2xvc2VFdmVudENvZGVOb1N0YXR1c1JjdmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbV9j
bG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29k
ZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUKKyAgICAgICAgICAgICAgICAgICAgfHwg
bV9jbG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50
Q29kZTo6Q2xvc2VFdmVudENvZGVUTFNIYW5kc2hha2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRD
b2RlOjpDbG9zZUV2ZW50Q29kZUFibm9ybWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGlkRmFpbCgiUmVjZWl2ZWQgYSBicm9rZW4gY2xvc2UgZnJhbWUgY29udGFpbmluZyBhIHJlc2Vy
dmVkIHN0YXR1cyBjb2RlLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA+PSAzKQor
ICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVudFJlYXNvbiA9IFN0cmluZzo6ZnJvbVVURjgoJmRh
dGFbMl0sIGxlbmd0aCAtIDIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
Y2xvc2VFdmVudFJlYXNvbiA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICAgICAgICAgIG1fcmVjZWl2
ZWRDbG9zaW5nSGFuZHNoYWtlID0gdHJ1ZTsKKyAgICAgICAgICAgIHNlbmRDbG9zaW5nSGFuZHNo
YWtlSWZOZWVkZWQobV9jbG9zZUV2ZW50Q29kZSwgbV9jbG9zZUV2ZW50UmVhc29uKTsKKyAgICAg
ICAgICAgIGRpZENsb3NlKG1fY2xvc2VFdmVudENvZGUsIG1fY2xvc2VFdmVudFJlYXNvbik7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYkNvcmU6OldlYlNvY2tldEZyYW1l
OjpPcENvZGVQaW5nOgorICAgICAgICAgICAgaWYgKCFzZW5kRnJhbWUoV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6Ok9wQ29kZVBvbmcsIGRhdGEsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgZGlk
RmFpbCgiRmFpbGVkIHRvIHNlbmQgV2ViU29ja2V0IGZyYW1lLiIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChmcmFtZVJlc3VsdCkgeworICAgICAg
ICBkaWRGYWlsKCpmcmFtZVJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChXZWJDb3JlOjpDdXJsU3RyZWFtSUQsIENVUkxjb2Rl
IGVycm9yQ29kZSkKK3sKKyAgICBkaWRGYWlsKG1ha2VTdHJpbmcoIldlYlNvY2tldCBuZXR3b3Jr
IGVycm9yOiBlcnJvciBjb2RlICIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihlcnJvckNvZGUpKSk7
Cit9CisKK2Jvb2wgV2ViU29ja2V0VGFzazo6YXBwZW5kUmVjZWl2ZWRCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgc2l6ZV90IG5ld0J1ZmZlclNpemUg
PSBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpICsgYnVmZmVyLnNpemUoKTsKKyAgICBpZiAobmV3QnVm
ZmVyU2l6ZSA8IG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fcmVjZWl2ZUJ1ZmZlci5hcHBlbmQoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6c2tpcFJlY2Vp
dmVkQnVmZmVyKHNpemVfdCBsZW5ndGgpCit7CisgICAgbWVtbW92ZShtX3JlY2VpdmVCdWZmZXIu
ZGF0YSgpLCBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpICsgbGVuZ3RoLCBtX3JlY2VpdmVCdWZmZXIu
c2l6ZSgpIC0gbGVuZ3RoKTsKKyAgICBtX3JlY2VpdmVCdWZmZXIuc2hyaW5rKG1fcmVjZWl2ZUJ1
ZmZlci5zaXplKCkgLSBsZW5ndGgpOworfQorCitFeHBlY3RlZDxib29sLCBTdHJpbmc+IFdlYlNv
Y2tldFRhc2s6OnZhbGlkYXRlT3BlbmluZ0hhbmRzaGFrZSgpCit7CisgICAgaWYgKG1fZGlkQ29t
cGxldGVPcGVuaW5nSGFuZHNoYWtlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICht
X3N0YXRlICE9IFN0YXRlOjpIYW5kc2hha2luZyB8fCAhbV9oYW5kc2hha2UgfHwgbV9oYW5kc2hh
a2UtPm1vZGUoKSAhPSBXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OkluY29tcGxldGUpIHsK
KyAgICAgICAgbV9oYW5kc2hha2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuZXhwZWN0ZWQgaGFuZHNoYWtlaW5nIGNvbmRpdGlvbiJfcyk7CisgICAgfQorCisg
ICAgYXV0byBoZWFkZXJMZW5ndGggPSBtX2hhbmRzaGFrZS0+cmVhZFNlcnZlckhhbmRzaGFrZSht
X3JlY2VpdmVCdWZmZXIuZGF0YSgpLCBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsKKyAgICBpZiAo
aGVhZGVyTGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNraXBSZWNl
aXZlZEJ1ZmZlcihoZWFkZXJMZW5ndGgpOworCisgICAgaWYgKG1faGFuZHNoYWtlLT5tb2RlKCkg
IT0gV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpDb25uZWN0ZWQpIHsKKyAgICAgICAgYXV0
byByZWFzb24gPSBtX2hhbmRzaGFrZS0+ZmFpbHVyZVJlYXNvbigpOworICAgICAgICBtX2hhbmRz
aGFrZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZWFzb24pOwor
ICAgIH0KKworICAgIFN0cmluZyBzZXJ2ZXJTZXRDb29raWUgPSBtX2hhbmRzaGFrZS0+c2VydmVy
U2V0Q29va2llKCk7CisgICAgaWYgKCFzZXJ2ZXJTZXRDb29raWUuaXNFbXB0eSgpKQorICAgICAg
ICBtX2NoYW5uZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29va2ll
c0Zyb21IVFRQUmVzcG9uc2UobV9yZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIG1fcmVx
dWVzdC51cmwoKSwgc2VydmVyU2V0Q29va2llKTsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3Bl
bmVkOworICAgIG1fZGlkQ29tcGxldGVPcGVuaW5nSGFuZHNoYWtlID0gdHJ1ZTsKKworICAgIG1f
Y2hhbm5lbC5kaWRDb25uZWN0KG1faGFuZHNoYWtlLT5zZXJ2ZXJXZWJTb2NrZXRQcm90b2NvbCgp
LCBtX2hhbmRzaGFrZS0+YWNjZXB0ZWRFeHRlbnNpb25zKCkpOworICAgIG1fY2hhbm5lbC5kaWRS
ZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZShtX2hhbmRz
aGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSkpOworCisgICAgbV9oYW5kc2hha2UgPSBu
dWxscHRyOworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gV2Vi
U29ja2V0VGFzazo6cmVjZWl2ZUZyYW1lcyhGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OldlYlNvY2tl
dEZyYW1lOjpPcENvZGUsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIGNhbGxiYWNrKQorewor
ICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpPcGVuZWQgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6Q2xv
c2luZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHdoaWxlIChtX3JlY2Vp
dmVCdWZmZXIuc2l6ZSgpICYmICFtX3Nob3VsZERpc2NhcmRSZWNlaXZlZERhdGEgJiYgIW1fcmVj
ZWl2ZWRDbG9zaW5nSGFuZHNoYWtlKSB7CisgICAgICAgIFdlYkNvcmU6OldlYlNvY2tldEZyYW1l
IGZyYW1lOworICAgICAgICBjb25zdCB1aW50OF90KiBmcmFtZUVuZDsKKyAgICAgICAgU3RyaW5n
IGVycm9yU3RyaW5nOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6OnBhcnNlRnJhbWUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9yZWNlaXZl
QnVmZmVyLmRhdGEoKSksIG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCksIGZyYW1lLCBmcmFtZUVuZCwg
ZXJyb3JTdHJpbmcpOworICAgICAgICBpZiAocGFyc2VSZXN1bHQgPT0gV2ViQ29yZTo6V2ViU29j
a2V0RnJhbWU6OkZyYW1lSW5jb21wbGV0ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIGlmIChwYXJzZVJlc3VsdCA9PSBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6
RnJhbWVFcnJvcikKKyAgICAgICAgICAgIHJldHVybiBlcnJvclN0cmluZzsKKworICAgICAgICBh
dXRvIGluZmxhdGVSZXN1bHQgPSBtX2RlZmxhdGVGcmFtZXIuaW5mbGF0ZShmcmFtZSk7CisgICAg
ICAgIGlmICghaW5mbGF0ZVJlc3VsdC0+c3VjY2VlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4g
aW5mbGF0ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpOworCisgICAgICAgIGlmIChhdXRvIHZhbGlk
YXRlUmVzdWx0ID0gdmFsaWRhdGVGcmFtZShmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gKnZh
bGlkYXRlUmVzdWx0OworCisgICAgICAgIGlmICghZnJhbWUuZmluYWwgfHwgZnJhbWUub3BDb2Rl
ID09IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24pIHsKKyAgICAg
ICAgICAgIGlmIChmcmFtZS5vcENvZGUgIT0gV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZUNvbnRpbnVhdGlvbikgeworICAgICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IGZyYW1lLm9w
Q29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRh
LmFwcGVuZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKworICAgICAgICAg
ICAgaWYgKGZyYW1lLmZpbmFsKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9jb250aW51
b3VzRnJhbWVPcENvZGUsIG1fY29udGludW91c0ZyYW1lRGF0YS5kYXRhKCksIG1fY29udGludW91
c0ZyYW1lRGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1l
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRhLmNsZWFyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FsbGJhY2soZnJh
bWUub3BDb2RlLCBmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKworICAgICAg
ICBpZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBza2lwUmVjZWl2
ZWRCdWZmZXIoZnJhbWVFbmQgLSBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gV2ViU29j
a2V0VGFzazo6dmFsaWRhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZSYgZnJh
bWUpCit7CisgICAgaWYgKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc1Jlc2VydmVkT3BDb2Rl
KGZyYW1lLm9wQ29kZSkpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJVbnJlY29nbml6ZWQg
ZnJhbWUgb3Bjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWUub3BDb2RlKSk7CisK
KyAgICBpZiAoZnJhbWUucmVzZXJ2ZWQyIHx8IGZyYW1lLnJlc2VydmVkMykKKyAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIk9uZSBvciBtb3JlIHJlc2VydmVkIGJpdHMgYXJlIG9uOiByZXNlcnZl
ZDIgPSAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWUucmVzZXJ2ZWQyKSwgIiwgcmVzZXJ2
ZWQzID0gIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLnJlc2VydmVkMykpOworCisgICAg
aWYgKGZyYW1lLm1hc2tlZCkKKyAgICAgICAgcmV0dXJuICAiQSBzZXJ2ZXIgbXVzdCBub3QgbWFz
ayBhbnkgZnJhbWVzIHRoYXQgaXQgc2VuZHMgdG8gdGhlIGNsaWVudC4iX3M7CisKKyAgICAvLyBB
bGwgY29udHJvbCBmcmFtZXMgbXVzdCBub3QgYmUgZnJhZ21lbnRlZC4KKyAgICBpZiAoV2ViQ29y
ZTo6V2ViU29ja2V0RnJhbWU6OmlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmICFmcmFt
ZS5maW5hbCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlJlY2VpdmVkIGZyYWdtZW50ZWQg
Y29udHJvbCBmcmFtZTogb3Bjb2RlID0gIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLm9w
Q29kZSkpOworCisgICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3QgaGF2ZSBhIHBheWxvYWQg
b2YgMTI1IGJ5dGVzIG9yIGxlc3MsIHdoaWNoIG1lYW5zIHRoZSBmcmFtZSBtdXN0IG5vdCBjb250
YWluCisgICAgLy8gdGhlICJleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCIgZmllbGQuCisgICAgaWYg
KFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSAm
JiBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6bmVlZHNFeHRlbmRlZExlbmd0aEZpZWxkKGZyYW1l
LnBheWxvYWRMZW5ndGgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUmVjZWl2ZWQgY29u
dHJvbCBmcmFtZSBoYXZpbmcgdG9vIGxvbmcgcGF5bG9hZDogIiwgZnJhbWUucGF5bG9hZExlbmd0
aCwgIiBieXRlcyIpOworCisgICAgLy8gQSBuZXcgZGF0YSBmcmFtZSBpcyByZWNlaXZlZCBiZWZv
cmUgdGhlIHByZXZpb3VzIGNvbnRpbnVvdXMgZnJhbWUgZmluaXNoZXMuCisgICAgLy8gTm90ZSB0
aGF0IGNvbnRyb2wgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGNvbWUgaW4gdGhlIG1pZGRsZSBvZiBj
b250aW51b3VzIGZyYW1lcy4KKyAgICBpZiAobV9oYXNDb250aW51b3VzRnJhbWUgJiYgZnJhbWUu
b3BDb2RlICE9IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24gJiYg
IVdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSkK
KyAgICAgICAgcmV0dXJuICJSZWNlaXZlZCBuZXcgZGF0YSBmcmFtZSBidXQgcHJldmlvdXMgY29u
dGludW91cyBmcmFtZSBpcyB1bmZpbmlzaGVkLiJfczsKKworICAgIC8vIEFuIHVuZXhwZWN0ZWQg
Y29udGludWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVkIHdpdGhvdXQgYW55IGxlYWRpbmcgZnJhbWUu
CisgICAgaWYgKCFtX2hhc0NvbnRpbnVvdXNGcmFtZSAmJiBmcmFtZS5vcENvZGUgPT0gV2ViQ29y
ZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNvbnRpbnVhdGlvbikKKyAgICAgICAgcmV0dXJuICJS
ZWNlaXZlZCB1bmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZS4iX3M7CisKKyAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRDbG9zaW5nSGFuZHNo
YWtlSWZOZWVkZWQoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBp
ZiAobV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ1ZjsKKyAgICBpZiAoIW1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlICYm
IGNvZGUgIT0gV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGU6OkNsb3Nl
RXZlbnRDb2RlTm90U3BlY2lmaWVkKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGlnaEJ5dGUg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oY29kZSkgPj4gODsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBsb3dCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGNvZGUpOworICAg
ICAgICBidWYuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KGhpZ2hCeXRlKSk7CisgICAgICAgIGJ1
Zi5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4obG93Qnl0ZSkpOworICAgICAgICBhdXRvIHJlYXNv
blVURjggPSByZWFzb24udXRmOCgpOworICAgICAgICBidWYuYXBwZW5kKHJlYXNvblVURjguZGF0
YSgpLCByZWFzb25VVEY4Lmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBpZiAoIXNlbmRGcmFtZShX
ZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlQ2xvc2UsIGJ1Zi5kYXRhKCksIGJ1Zi5zaXpl
KCkpKQorICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWUuIik7
CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3Npbmc7CisgICAgbV9kaWRTZW5kQ2xvc2luZ0hh
bmRzaGFrZSA9IHRydWU7Cit9CisKK2Jvb2wgV2ViU29ja2V0VGFzazo6c2VuZEZyYW1lKFdlYkNv
cmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGUgb3BDb2RlLCBjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBpZiAobV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZSBmcmFt
ZShvcENvZGUsIHRydWUsIGZhbHNlLCB0cnVlLCBkYXRhLCBkYXRhTGVuZ3RoKTsKKworICAgIGF1
dG8gZGVmbGF0ZVJlc3VsdCA9IG1fZGVmbGF0ZUZyYW1lci5kZWZsYXRlKGZyYW1lKTsKKyAgICBp
ZiAoIWRlZmxhdGVSZXN1bHQtPnN1Y2NlZWRlZCgpKSB7CisgICAgICAgIGRpZEZhaWwoZGVmbGF0
ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiBmcmFtZURhdGE7CisgICAgZnJhbWUubWFrZUZyYW1lRGF0
YShmcmFtZURhdGEpOworCisgICAgYXV0byBidWZmZXIgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhf
dD4oZnJhbWVEYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KGJ1ZmZlci5nZXQoKSwgZnJhbWVEYXRh
LmRhdGEoKSwgZnJhbWVEYXRhLnNpemUoKSk7CisKKyAgICBtX3NjaGVkdWxlci5zZW5kKG1fc3Ry
ZWFtSUQsIFdURk1vdmUoYnVmZmVyKSwgZnJhbWVEYXRhLnNpemUoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChjb25zdCBTdHJpbmcmIHJlYXNv
bikKK3sKKyAgICBpZiAobV9yZWNlaXZlZERpZEZhaWwpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcmVjZWl2ZWREaWRGYWlsID0gdHJ1ZTsKKworICAgIC8vIEh5YmktMTAgc3BlY2lmaWNhdGlv
biBleHBsaWNpdGx5IHN0YXRlcyB3ZSBtdXN0IG5vdCBjb250aW51ZSB0byBoYW5kbGUgaW5jb21p
bmcgZGF0YQorICAgIC8vIG9uY2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGZhaWxlZCAo
c2VjdGlvbiA3LjEuNykuCisgICAgbV9zaG91bGREaXNjYXJkUmVjZWl2ZWREYXRhID0gdHJ1ZTsK
KyAgICBpZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHNraXBSZWNlaXZl
ZEJ1ZmZlcihtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsgLy8gU2F2ZSBtZW1vcnkuCisgICAgbV9k
ZWZsYXRlRnJhbWVyLmRpZEZhaWwoKTsKKyAgICBtX2hhc0NvbnRpbnVvdXNGcmFtZSA9IGZhbHNl
OworICAgIG1fY29udGludW91c0ZyYW1lRGF0YS5jbGVhcigpOworCisgICAgbV9jaGFubmVsLmRp
ZFJlY2VpdmVNZXNzYWdlRXJyb3IocmVhc29uKTsKKyAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1
cmUsIHsgfSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkQ2xvc2UoaW50MzJfdCBjb2Rl
LCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBkZXN0cnVjdFN0cmVhbSgpOworCisgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpDbG9zZWQ7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb2Rl
LCByZWFzb25dIHsKKyAgICAgICAgbV9jaGFubmVsLmRpZENsb3NlKGNvZGUsIHJlYXNvbik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGVzdHJ1Y3RTdHJlYW0oKQoreworICAg
IGlmIChpc1N0cmVhbUludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2No
ZWR1bGVyLmRlc3Ryb3lTdHJlYW0obV9zdHJlYW1JRCk7CisgICAgbV9zdHJlYW1JRCA9IFdlYkNv
cmU6OmludmFsaWRDdXJsU3RyZWFtSUQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tD
dXJsLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1
cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5MmY0ZTE0YzI2
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9X
ZWJTb2NrZXRUYXNrQ3VybC5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldlYlNv
Y2tldFRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0N1cmxTdHJlYW0uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hh
bm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0SGFuZHNoYWtlLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIEN1cmxTdHJlYW1TY2hlZHVsZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrU29ja2V0Q2hhbm5lbDsKK3N0
cnVjdCBTZXNzaW9uU2V0OworCitjbGFzcyBXZWJTb2NrZXRUYXNrIDogcHVibGljIFdlYkNvcmU6
OkN1cmxTdHJlYW06OkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOworICAgIH5XZWJT
b2NrZXRUYXNrKCk7CisKKyAgICB2b2lkIHNlbmRTdHJpbmcoY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNlbmREYXRhKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBjbG9zZShpbnQzMl90IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKKworICAg
IHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIFNlc3Npb25TZXQqIHNl
c3Npb25TZXQoKSB7IHJldHVybiBudWxscHRyOyB9CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFz
cyBTdGF0ZSB7CisgICAgICAgIENvbm5lY3RpbmcsCisgICAgICAgIEhhbmRzaGFraW5nLAorICAg
ICAgICBPcGVuZWQsCisgICAgICAgIENsb3NpbmcsCisgICAgICAgIENsb3NlZAorICAgIH07CisK
KyAgICB2b2lkIGRpZE9wZW4oV2ViQ29yZTo6Q3VybFN0cmVhbUlEKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFNlbmREYXRhKFdlYkNvcmU6OkN1cmxTdHJlYW1JRCwgc2l6ZV90KSBmaW5hbCB7IH07Cisg
ICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpDdXJsU3RyZWFtSUQsIGNvbnN0IFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlciYpIGZpbmFsOworICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpDdXJs
U3RyZWFtSUQsIENVUkxjb2RlKSBmaW5hbDsKKworICAgIGJvb2wgYXBwZW5kUmVjZWl2ZWRCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJik7CisgICAgdm9pZCBza2lwUmVjZWl2ZWRC
dWZmZXIoc2l6ZV90IGxlbik7CisKKyAgICBFeHBlY3RlZDxib29sLCBTdHJpbmc+IHZhbGlkYXRl
T3BlbmluZ0hhbmRzaGFrZSgpOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiByZWNlaXZlRnJh
bWVzKEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSwgY29uc3Qg
dWludDhfdCosIHNpemVfdCk+JiYpOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiB2YWxpZGF0
ZUZyYW1lKGNvbnN0IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lJik7CisKKyAgICBib29sIHNlbmRG
cmFtZShXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlLCBjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YUxlbmd0aCk7CisgICAgdm9pZCBzZW5kQ2xvc2luZ0hhbmRzaGFrZUlmTmVl
ZGVkKGludDMyX3QsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKKworICAgIHZvaWQgZGlkRmFpbChj
b25zdCBTdHJpbmcmIHJlYXNvbik7CisgICAgdm9pZCBkaWRDbG9zZShpbnQzMl90IGNvZGUsIGNv
bnN0IFN0cmluZyYgcmVhc29uKTsKKworICAgIGJvb2wgaXNTdHJlYW1JbnZhbGlkYXRlZCgpIHsg
cmV0dXJuIG1fc3RyZWFtSUQgPT0gV2ViQ29yZTo6aW52YWxpZEN1cmxTdHJlYW1JRDsgfQorICAg
IHZvaWQgZGVzdHJ1Y3RTdHJlYW0oKTsKKworICAgIE5ldHdvcmtTb2NrZXRDaGFubmVsJiBtX2No
YW5uZWw7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICBTdHJp
bmcgbV9wcm90b2NvbDsKKworICAgIFdlYkNvcmU6OkN1cmxTdHJlYW1TY2hlZHVsZXImIG1fc2No
ZWR1bGVyOworICAgIFdlYkNvcmU6OkN1cmxTdHJlYW1JRCBtX3N0cmVhbUlEIHsgV2ViQ29yZTo6
aW52YWxpZEN1cmxTdHJlYW1JRCB9OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpDb25u
ZWN0aW5nIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6V2ViU29ja2V0SGFuZHNo
YWtlPiBtX2hhbmRzaGFrZTsKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXREZWZsYXRlRnJhbWVyIG1f
ZGVmbGF0ZUZyYW1lcjsKKworICAgIGJvb2wgbV9kaWRDb21wbGV0ZU9wZW5pbmdIYW5kc2hha2Ug
eyBmYWxzZSB9OworCisgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRSZWNlaXZlZERhdGEgeyBmYWxz
ZSB9OworICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlY2VpdmVCdWZmZXI7CisKKyAgICBib29sIG1f
aGFzQ29udGludW91c0ZyYW1lIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpXZWJTb2NrZXRGcmFt
ZTo6T3BDb2RlIG1fY29udGludW91c0ZyYW1lT3BDb2RlIHsgV2ViQ29yZTo6V2ViU29ja2V0RnJh
bWU6Ok9wQ29kZTo6T3BDb2RlSW52YWxpZCB9OworICAgIFZlY3Rvcjx1aW50OF90PiBtX2NvbnRp
bnVvdXNGcmFtZURhdGE7CisKKyAgICBib29sIG1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlIHsg
ZmFsc2UgfTsKKyAgICBpbnQzMl90IG1fY2xvc2VFdmVudENvZGUgeyBXZWJDb3JlOjpXZWJTb2Nr
ZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVOb3RTcGVjaWZpZWQgfTsK
KyAgICBTdHJpbmcgbV9jbG9zZUV2ZW50UmVhc29uOworCisgICAgYm9vbCBtX2RpZFNlbmRDbG9z
aW5nSGFuZHNoYWtlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVjZWl2ZWREaWRGYWlsIHsgZmFs
c2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBs
YXlTdGF0aW9uLmNtYWtlCmluZGV4IDlhMmFlMmMxYWU3NC4uYzViMzhiMzkwZTNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC00OCw2ICs0OCw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJv
Y2Vzc0N1cmwuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc01haW5D
dXJsLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAor
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwCiAKICAgICBQbGF0
Zm9ybS9JUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDY1OTM0NWVkZWMx
MC4uOTJmYTgxYjFiMTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTE2NSw2ICsxNjUs
NyBAQCBpZiAoJHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICAgICAgTmV0d29ya1Byb2Nl
c3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1
cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKICAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3Vy
bC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCisgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvV2Vi
U29ja2V0VGFza0N1cmwuY3BwCiAKICAgICAgICAgU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VD
YWlyby5jcHAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454391</attachid>
            <date>2022-03-10 12:10:35 -0800</date>
            <delta_ts>2022-05-29 18:11:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237579.diff</filename>
            <type>text/plain</type>
            <size>31842</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzZmRiOGI5NWM5NzYuLjU0NGJjNDkzOGJiMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDIyLTAzLTEwICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CisKKyAg
ICAgICAgW0N1cmxdIEltcGxlbWVudCBXZWJTb2NrZXRUYXNrCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgd2ViIHNvY2tldCBleHBlY3RhdGlv
bnMgYmFzZWQgb24gdGhlIFdlYlNvY2tldFRhc2sgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAg
Q3VycmVudGx5IGlnbm9yaW5nIFdQVCB0ZXN0cyBhcyB0aGVyZSBhcmUgaXNzdWVzIHdpdGggdGhl
IHRlc3QgaGFybmVzcyBvbiBXaW5kb3dzLgorCisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMi0wMy0xMCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjg0NzExKTogW0dTdHJlYW1l
cl0gQnVmZmVyaW5nLCBzZWVrIGJyb2tlbiBvbiB5b3V0dWJlLmNvbQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYTI2OWNjOGE0Mzc3Li4z
ZGMyNTJiZTFkMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4
cGVjdGF0aW9ucwpAQCAtODkxLDE0ICs4OTEsMTQgQEAgaHR0cC90ZXN0cy93ZWJzaGFyZSBbIFNr
aXAgXQogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9jb250ZW50ZXh0ZW5zaW9ucyBb
IFNraXAgXQogCiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2ZyYW1lLWxlbmd0aHMu
aHRtbCBbIFBhc3MgVGltZW91dCBdCi1odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2h0
dHBvbmx5LWNvb2tpZS5wbCBbIFBhc3MgRmFpbHVyZSBdCi1odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL2luc3BlY3RvciBbIFNraXAgXQotaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZWN1cmUtY29va2llLWluc2VjdXJlLWNvbm5lY3Rpb24ucGwgWyBQYXNzIEZhaWx1cmUg
XQogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZWN1cmUtY29va2llLXNlY3VyZS1j
b25uZWN0aW9uLnBsIFsgUGFzcyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2h5YmkvdXBncmFkZS1zaW1wbGUtd3MuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCisKKyMgW1dpbl0g
U2VlaW5nIEludGVybmFsIFNlcnZlciBFcnJvciB3aGVuIHJ1bm5pbmcgc29tZSBodHRwIHdlYnNv
Y2tldCB0ZXN0cworIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3
NzIyCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dlYnNvY2tldC1hbGxvd2VkLXNl
dHRpbmctY29va2llLWFzLXRoaXJkLXBhcnR5Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93ZWJzb2NrZXQtYmxvY2tlZC1mcm9tLXNldHRpbmct
Y29va2llLWFzLXRoaXJkLXBhcnR5Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS93ZWJzb2NrZXQtY29va2llLW92ZXJ3cml0ZS1iZWhhdmlvci5o
dG1sIFsgUGFzcyBGYWlsdXJlIF0KLWh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29y
a2Vycy93b3JrZXItcmVsb2FkLmh0bWwgWyBUaW1lb3V0IFBhc3MgXQogCiAjIE5lZWRzIGN1cmwg
ZG93bmxvYWQgc3VwcG9ydAogaHR0cC90ZXN0cy93b3JrZXJzL3NlcnZpY2Uvc2VydmljZS13b3Jr
ZXItZG93bmxvYWQtYXN5bmMtZGVsZWdhdGVzLmh0dHBzLmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQg
XQpAQCAtMjAyNCw3ICsyMDI0LDYgQEAgaHR0cC90ZXN0cy9taXNjL2xhcmdlLWpzLXByb2dyYW0u
cHkgWyBTa2lwIF0gIyBUaW1lb3V0CiBodHRwL3Rlc3RzL21pc2Mvd2VidGltaW5nLW9uZS1yZWRp
cmVjdC5weSBbIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9taXNjL3dlYnRpbWluZy10d28tcmVkaXJl
Y3RzLnB5IFsgRmFpbHVyZSBdCiBodHRwL3Rlc3RzL3BlcmZvcm1hbmNlL3BhaW50LXRpbWluZy9w
ZXJmb3JtYW5jZS1wYWludC10aW1pbmctZmNwLWFmdGVyLXZpc3VhbGx5LW5vbi1lbXB0eS1mb3It
c3R5bGUuaHRtbCBbIFRpbWVvdXQgXQotaHR0cC90ZXN0cy93ZWJzb2NrZXQvd2ViLXNvY2tldC1s
b2Fkcy1jYXB0dXJlZC1pbi1wZXItcGFnZS1kb21haW5zLmh0bWwgWyBTa2lwIF0gIyBDcmFzaCBi
eSBhc3NlcnRpb24gZmFpbHVyZQogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29u
dHJvbC1iYXNpYy1hbGxvdy1saXN0LXJlcXVlc3QtaGVhZGVycy5odG1sIFsgRmFpbHVyZSBdCiBo
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NodW5rZWQtcHJvZ3Jlc3MtZXZlbnQtZXhwZWN0ZWRM
ZW5ndGguaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L29yaWdpbi1oZWFkZXItc2FtZS1vcmlnaW4tZ2V0LWFzeW5jLmh0bWwgWyBGYWlsdXJlIF0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA5NzdlMTMzMTU0MzEuLjZlNWNmMWQ1MWE5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIyLTAzLTEwICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5j
b20+CisKKyAgICAgICAgW0N1cmxdIEltcGxlbWVudCBXZWJTb2NrZXRUYXNrCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlIFNvY2tldFByb3Zp
ZGVyIHRvIGNyZWF0ZSB0aGUgV2ViU29ja2V0Q2hhbm5lbC4KKworICAgICAgICBDb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpjcmVhdGUpOgorCiAyMDIyLTAzLTEwICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIEluZGV4ZWREQjogZnJlZSBtZW1vcnkgdXNlZCBieSBk
YXRhYmFzZSBjb25uZWN0aW9uIG9uIGxvdy1tZW1vcnkgd2FybmluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5jcHAKaW5kZXggM2JkMmMxMGU3ZmIwLi44Mjk0ZjVlOGQzYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFdlYlNvY2tldENoYW5uZWxD
bGllbnQmIGNsaWVudCwgU29ja2V0UHJvdmlkZXImIHByb3ZpZGVyKQogewotI2lmIFVTRShTT1VQ
KQorI2lmIFVTRShTT1VQKSB8fCBVU0UoQ1VSTCkKICAgICBhdXRvIGNoYW5uZWwgPSBwcm92aWRl
ci5jcmVhdGVXZWJTb2NrZXRDaGFubmVsKGRvY3VtZW50LCBjbGllbnQpOwogICAgIEFTU0VSVChj
aGFubmVsKTsKICAgICByZXR1cm4gY2hhbm5lbC5yZWxlYXNlTm9uTnVsbCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAzMzIyZTRmN2VlODguLmRkZWEyZmE5NmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAor
MjAyMi0wMy0xMCAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgorCisgICAg
ICAgIFtDdXJsXSBJbXBsZW1lbnQgV2ViU29ja2V0VGFzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFdlYlNvY2tldFRhc2sgZm9yIGN1
cmwgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5o
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25DdXJsOjpjcmVhdGVXZWJTb2NrZXRUYXNr
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtTZXNzaW9uQ3VybC5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6V2ViU29ja2V0VGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNvY2tldFRhc2s6On5XZWJTb2NrZXRUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU29ja2V0VGFzazo6c2VuZFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
Y2tldFRhc2s6OnNlbmREYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6Y2xv
c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpjYW5jZWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2Nr
ZXRUYXNrOjpkaWRPcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpkaWRGYWlsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6YXBwZW5kUmVjZWl2ZWRCdWZmZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpza2lwUmVjZWl2ZWRCdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjp2YWxpZGF0ZU9wZW5pbmdIYW5kc2hha2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpyZWNlaXZlRnJhbWVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU29ja2V0VGFzazo6dmFsaWRhdGVGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNvY2tldFRhc2s6OnNlbmRDbG9zaW5nSGFuZHNoYWtlSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRUYXNrOjpzZW5kRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2Nr
ZXRUYXNrOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFRhc2s6OmRlc3Ry
dWN0U3RyZWFtKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tD
dXJsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpzZXNzaW9uU2V0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6aXNTdHJlYW1JbnZhbGlkYXRlZCk6
CisgICAgICAgICogUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bVdpbi5jbWFrZToKKwogMjAyMi0wMy0xMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNv
bT4KIAogICAgICAgICBJbmRleGVkREI6IGZyZWUgbWVtb3J5IHVzZWQgYnkgZGF0YWJhc2UgY29u
bmVjdGlvbiBvbiBsb3ctbWVtb3J5IHdhcm5pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTb2NrZXRUYXNrLmgKaW5kZXggMzA5YmFiNDI1N2IwLi5kNjFlNjdkYzM0MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCkBAIC0yOSw2
ICsyOSw4IEBACiAjaW5jbHVkZSAiV2ViU29ja2V0VGFza0NvY29hLmgiCiAjZWxpZiBVU0UoU09V
UCkKICNpbmNsdWRlICJXZWJTb2NrZXRUYXNrU291cC5oIgorI2VsaWYgVVNFKENVUkwpCisjaW5j
bHVkZSAiV2ViU29ja2V0VGFza0N1cmwuaCIKICNlbHNlCiAKICNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Nlc3Npb25DdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9O
ZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCmluZGV4IDAwMTIxZWFiOGNmMC4uODkyZDFiMjU0MWUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Np
b25DdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a1Nlc3Npb25DdXJsLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza0N1cmwu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphckRCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
dXJsQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CkBAIC01OCw0ICs1OSw5IEBAIE5ldHdvcmtTZXNzaW9uQ3VybDo6fk5ldHdvcmtTZXNzaW9uQ3Vy
bCgpCiAKIH0KIAorc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldFRhc2s+IE5ldHdvcmtTZXNzaW9u
Q3VybDo6Y3JlYXRlV2ViU29ja2V0VGFzayhXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBOZXR3b3Jr
U29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mLCBib29sKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYlNvY2tldFRhc2s+KGNoYW5u
ZWwsIHJlcXVlc3QsIHByb3RvY29sKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25D
dXJsLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25D
dXJsLmgKaW5kZXggZmUxNjc1NjAyMzhlLi45ZGNkYjA1YWI5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmgKQEAg
LTM5LDYgKzM5LDkgQEAgcHVibGljOgogICAgIH0KICAgICBOZXR3b3JrU2Vzc2lvbkN1cmwoTmV0
d29ya1Byb2Nlc3MmLCBjb25zdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYpOwog
ICAgIH5OZXR3b3JrU2Vzc2lvbkN1cmwoKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViU29ja2V0VGFzaz4gY3JlYXRlV2ViU29ja2V0VGFzayhXZWJQYWdlUHJveHlJZGVudGlm
aWVyLCBOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYs
IGJvb2wpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tDdXJsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRjYmMzNTY3YjY4ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9XZWJTb2Nr
ZXRUYXNrQ3VybC5jcHAKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNvY2tldFRhc2tDdXJsLmgiCisKKyNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRl
ICJOZXR3b3JrU29ja2V0Q2hhbm5lbC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ3VybFN0cmVhbVNj
aGVkdWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TYW1lU2l0ZUluZm8uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvY2tldFRhc2s6
OldlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAg
ICA6IG1fY2hhbm5lbChjaGFubmVsKQorICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QuaXNvbGF0ZWRD
b3B5KCkpCisgICAgLCBtX3Byb3RvY29sKHByb3RvY29sKQorICAgICwgbV9zY2hlZHVsZXIoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnN0cmVhbVNjaGVkdWxlcigpKQoreworICAg
IGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoIndzcyIpICYmIFdlYkNvcmU6OkRlcHJlY2F0
ZWRHbG9iYWxTZXR0aW5nczo6YWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoKSkKKyAgICAgICAgV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpLnNldElnbm9yZVNTTEVy
cm9ycyh0cnVlKTsKKworICAgIG1fc3RyZWFtSUQgPSBtX3NjaGVkdWxlci5jcmVhdGVTdHJlYW0o
cmVxdWVzdC51cmwoKSwgKnRoaXMpOworICAgIG1fY2hhbm5lbC5kaWRTZW5kSGFuZHNoYWtlUmVx
dWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QobV9yZXF1ZXN0KSk7Cit9CisKK1dlYlNvY2tl
dFRhc2s6On5XZWJTb2NrZXRUYXNrKCkKK3sKKyAgICBkZXN0cnVjdFN0cmVhbSgpOworfQorCit2
b2lkIFdlYlNvY2tldFRhc2s6OnNlbmRTdHJpbmcoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiB1
dGY4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6Ok9wZW5lZCkgeworICAgICAgICBpZiAoIXNlbmRGcmFtZShXZWJDb3Jl
OjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dCwgdXRmOC5kYXRhKCksIHV0Zjguc2l6ZSgpKSkK
KyAgICAgICAgICAgIGRpZEZhaWwoIkZhaWxlZCB0byBzZW5kIFdlYlNvY2tldCBmcmFtZS4iKTsK
KyAgICB9CisgICAgY2FsbGJhY2soKTsKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpzZW5kRGF0
YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbmVkKSB7Cisg
ICAgICAgIGlmICghc2VuZEZyYW1lKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5h
cnksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpCisgICAgICAgICAgICBkaWRGYWlsKCJGYWls
ZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWUuIik7CisgICAgfQorICAgIGNhbGxiYWNrKCk7Cit9
CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcm
IHJlYXNvbikKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29ubmVjdGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpIYW5kc2hha2luZykgeworICAgICAgICBkaWRDbG9zZShXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1
cmUsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZW5kQ2xvc2luZ0hhbmRz
aGFrZUlmTmVlZGVkKGNvZGUsIHJlYXNvbik7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2Fu
Y2VsKCkKK3sKKworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnJlc3VtZSgpCit7CisKK30KKwor
dm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRPcGVuKFdlYkNvcmU6OkN1cmxTdHJlYW1JRCkKK3sKKyAg
ICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29ubmVjdGluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpIYW5kc2hha2luZzsKKworICAgIG1faGFuZHNoYWtlID0gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U+KG1fcmVxdWVzdC51cmwoKSwgbV9w
cm90b2NvbCwgbV9yZXF1ZXN0Lmh0dHBVc2VyQWdlbnQoKSwgbV9yZXF1ZXN0Lmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6T3JpZ2luKSwgbV9yZXF1ZXN0LmFsbG93Q29v
a2llcygpLCBmYWxzZSk7CisgICAgbV9oYW5kc2hha2UtPnJlc2V0KCk7CisgICAgbV9oYW5kc2hh
a2UtPmFkZEV4dGVuc2lvblByb2Nlc3NvcihtX2RlZmxhdGVGcmFtZXIuY3JlYXRlRXh0ZW5zaW9u
UHJvY2Vzc29yKCkpOworCisgICAgYXV0byBtZXNzYWdlID0gbV9oYW5kc2hha2UtPmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UoKTsKKyAgICBTdHJpbmcgaGFuZHNoYWtlTWVzc2FnZShtZXNzYWdlLmRh
dGEoKSwgbWVzc2FnZS5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9yZXF1ZXN0LmFsbG93Q29va2ll
cygpKSB7CisgICAgICAgIGF1dG8gaW5jbHVkZVNlY3VyZUNvb2tpZXMgPSBtX3JlcXVlc3QudXJs
KCkucHJvdG9jb2xJcygid3NzIikgPyBXZWJDb3JlOjpJbmNsdWRlU2VjdXJlQ29va2llczo6WWVz
IDogV2ViQ29yZTo6SW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vOworICAgICAgICBTdHJpbmcgY29v
a2llSGVhZGVyRmllbGQgPSBtX2NoYW5uZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3RvcmFnZVNlc3Np
b24oKS0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUobV9yZXF1ZXN0LmZpcnN0UGFydHlG
b3JDb29raWVzKCksIFdlYkNvcmU6OlNhbWVTaXRlSW5mbzo6Y3JlYXRlKG1fcmVxdWVzdCksIG1f
cmVxdWVzdC51cmwoKSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIGluY2x1ZGVTZWN1cmVD
b29raWVzLCBXZWJDb3JlOjpTaG91bGRBc2tJVFA6OlllcywgV2ViQ29yZTo6U2hvdWxkUmVsYXhU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmc6Ok5vKS5maXJzdDsKKyAgICAgICAgaWYgKCFjb29raWVI
ZWFkZXJGaWVsZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGhhbmRzaGFrZU1lc3NhZ2UucmVt
b3ZlKGhhbmRzaGFrZU1lc3NhZ2UubGVuZ3RoKCkgLSAyLCAyKTsgLy8gUmVtb3ZlIHRoZSB0ZXJt
aW5hdGluZyAnXHJcbicKKyAgICAgICAgICAgIGhhbmRzaGFrZU1lc3NhZ2UuYXBwZW5kKCJDb29r
aWU6ICIpOworICAgICAgICAgICAgaGFuZHNoYWtlTWVzc2FnZS5hcHBlbmQoY29va2llSGVhZGVy
RmllbGQpOworICAgICAgICAgICAgaGFuZHNoYWtlTWVzc2FnZS5hcHBlbmQoIlxyXG5cclxuIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGhhbmRzaGFrZURhdGEgPSBoYW5kc2hha2VN
ZXNzYWdlLnV0ZjgoKTsKKyAgICBhdXRvIGJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTx1aW50OF90
PihoYW5kc2hha2VEYXRhLmxlbmd0aCgpKTsKKyAgICBtZW1jcHkoYnVmZmVyLmdldCgpLCBoYW5k
c2hha2VEYXRhLmRhdGEoKSwgaGFuZHNoYWtlRGF0YS5sZW5ndGgoKSk7CisKKyAgICBtX3NjaGVk
dWxlci5zZW5kKG1fc3RyZWFtSUQsIFdURk1vdmUoYnVmZmVyKSwgaGFuZHNoYWtlRGF0YS5sZW5n
dGgoKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6
Q3VybFN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29ubmVjdGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpD
bG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghYnVmZmVyLnNpemUoKSkgeworICAg
ICAgICBkaWRDbG9zZSgwLCB7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fc2hvdWxkRGlzY2FyZFJlY2VpdmVkRGF0YSB8fCBtX3JlY2VpdmVkQ2xvc2luZ0hhbmRzaGFr
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFhcHBlbmRSZWNlaXZlZEJ1ZmZlcihidWZm
ZXIpKSB7CisgICAgICAgIGRpZEZhaWwoIlJhbiBvdXQgb2YgbWVtb3J5IHdoaWxlIHJlY2Vpdmlu
ZyBXZWJTb2NrZXQgZGF0YS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8g
dmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZU9wZW5pbmdIYW5kc2hha2UoKTsKKyAgICBpZiAoIXZh
bGlkYXRlUmVzdWx0Lmhhc192YWx1ZSgpKSB7CisgICAgICAgIGRpZEZhaWwodmFsaWRhdGVSZXN1
bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVJl
c3VsdC52YWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGZyYW1lUmVzdWx0ID0g
cmVjZWl2ZUZyYW1lcyhbdGhpc10oV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBvcENv
ZGUsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgc3dpdGNo
IChvcENvZGUpIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2Rl
VGV4dDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGxl
bmd0aCA/IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKSA6IGVtcHR5U3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtZXNzYWdlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5uZWwuZGlkUmVjZWl2ZVRleHQobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBkaWRGYWlsKCJDb3VsZCBub3QgZGVjb2RlIGEgdGV4dCBm
cmFtZSBhcyBVVEYtOC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUJpbmFyeToKKyAgICAg
ICAgICAgIG1fY2hhbm5lbC5kaWRSZWNlaXZlQmluYXJ5RGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNsb3NlOgorICAgICAgICAg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNv
cmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29kZU5vU3Rh
dHVzUmN2ZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OkNsb3Nl
RXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29kZUFibm9ybWFsQ2xvc3VyZTsKKyAgICAgICAgICAgICAg
ICBkaWRGYWlsKCJSZWNlaXZlZCBhIGJyb2tlbiBjbG9zZSBmcmFtZSBjb250YWluaW5nIGFuIGlu
dmFsaWQgc2l6ZSBib2R5LiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBoaWdoQnl0ZSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGFbMF0pOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgbG93Qnl0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGFbMV0pOworICAg
ICAgICAgICAgICAgIG1fY2xvc2VFdmVudENvZGUgPSBoaWdoQnl0ZSA8PCA4IHwgbG93Qnl0ZTsK
KyAgICAgICAgICAgICAgICBpZiAobV9jbG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2Nr
ZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVOb1N0YXR1c1JjdmQKKyAg
ICAgICAgICAgICAgICAgICAgfHwgbV9jbG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJTb2Nr
ZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUK
KyAgICAgICAgICAgICAgICAgICAgfHwgbV9jbG9zZUV2ZW50Q29kZSA9PSBXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xvc2VFdmVudENvZGVUTFNIYW5kc2hha2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9jbG9zZUV2ZW50Q29kZSA9IFdlYkNvcmU6OldlYlNv
Y2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlOjpDbG9zZUV2ZW50Q29kZUFibm9ybWFsQ2xvc3Vy
ZTsKKyAgICAgICAgICAgICAgICAgICAgZGlkRmFpbCgiUmVjZWl2ZWQgYSBicm9rZW4gY2xvc2Ug
ZnJhbWUgY29udGFpbmluZyBhIHJlc2VydmVkIHN0YXR1cyBjb2RlLiIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGxlbmd0aCA+PSAzKQorICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVudFJlYXNv
biA9IFN0cmluZzo6ZnJvbVVURjgoJmRhdGFbMl0sIGxlbmd0aCAtIDIpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fY2xvc2VFdmVudFJlYXNvbiA9IGVtcHR5U3RyaW5nKCk7
CisKKyAgICAgICAgICAgIG1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNlbmRDbG9zaW5nSGFuZHNoYWtlSWZOZWVkZWQobV9jbG9zZUV2ZW50Q29kZSwgbV9j
bG9zZUV2ZW50UmVhc29uKTsKKyAgICAgICAgICAgIGRpZENsb3NlKG1fY2xvc2VFdmVudENvZGUs
IG1fY2xvc2VFdmVudFJlYXNvbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGVQaW5nOgorICAgICAgICAgICAgaWYgKCFz
ZW5kRnJhbWUoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZVBvbmcsIGRhdGEsIGxlbmd0
aCkpCisgICAgICAgICAgICAgICAgZGlkRmFpbCgiRmFpbGVkIHRvIHNlbmQgV2ViU29ja2V0IGZy
YW1lLiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlm
IChmcmFtZVJlc3VsdCkgeworICAgICAgICBkaWRGYWlsKCpmcmFtZVJlc3VsdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChXZWJDb3Jl
OjpDdXJsU3RyZWFtSUQsIENVUkxjb2RlIGVycm9yQ29kZSkKK3sKKyAgICBkaWRGYWlsKG1ha2VT
dHJpbmcoIldlYlNvY2tldCBuZXR3b3JrIGVycm9yOiBlcnJvciBjb2RlICIsIHN0YXRpY19jYXN0
PHVpbnQzMl90PihlcnJvckNvZGUpKSk7Cit9CisKK2Jvb2wgV2ViU29ja2V0VGFzazo6YXBwZW5k
UmVjZWl2ZWRCdWZmZXIoY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBidWZmZXIpCit7Cisg
ICAgc2l6ZV90IG5ld0J1ZmZlclNpemUgPSBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpICsgYnVmZmVy
LnNpemUoKTsKKyAgICBpZiAobmV3QnVmZmVyU2l6ZSA8IG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcmVjZWl2ZUJ1ZmZlci5hcHBlbmQoYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViU29ja2V0VGFzazo6c2tpcFJlY2VpdmVkQnVmZmVyKHNpemVfdCBsZW5ndGgpCit7CisgICAg
bWVtbW92ZShtX3JlY2VpdmVCdWZmZXIuZGF0YSgpLCBtX3JlY2VpdmVCdWZmZXIuZGF0YSgpICsg
bGVuZ3RoLCBtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpIC0gbGVuZ3RoKTsKKyAgICBtX3JlY2VpdmVC
dWZmZXIuc2hyaW5rKG1fcmVjZWl2ZUJ1ZmZlci5zaXplKCkgLSBsZW5ndGgpOworfQorCitFeHBl
Y3RlZDxib29sLCBTdHJpbmc+IFdlYlNvY2tldFRhc2s6OnZhbGlkYXRlT3BlbmluZ0hhbmRzaGFr
ZSgpCit7CisgICAgaWYgKG1fZGlkQ29tcGxldGVPcGVuaW5nSGFuZHNoYWtlKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpIYW5kc2hha2luZyB8fCAh
bV9oYW5kc2hha2UgfHwgbV9oYW5kc2hha2UtPm1vZGUoKSAhPSBXZWJDb3JlOjpXZWJTb2NrZXRI
YW5kc2hha2U6OkluY29tcGxldGUpIHsKKyAgICAgICAgbV9oYW5kc2hha2UgPSBudWxscHRyOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaGFuZHNoYWtlaW5nIGNv
bmRpdGlvbiJfcyk7CisgICAgfQorCisgICAgYXV0byBoZWFkZXJMZW5ndGggPSBtX2hhbmRzaGFr
ZS0+cmVhZFNlcnZlckhhbmRzaGFrZShtX3JlY2VpdmVCdWZmZXIuZGF0YSgpLCBtX3JlY2VpdmVC
dWZmZXIuc2l6ZSgpKTsKKyAgICBpZiAoaGVhZGVyTGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHNraXBSZWNlaXZlZEJ1ZmZlcihoZWFkZXJMZW5ndGgpOworCisgICAg
aWYgKG1faGFuZHNoYWtlLT5tb2RlKCkgIT0gV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpD
b25uZWN0ZWQpIHsKKyAgICAgICAgYXV0byByZWFzb24gPSBtX2hhbmRzaGFrZS0+ZmFpbHVyZVJl
YXNvbigpOworICAgICAgICBtX2hhbmRzaGFrZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChyZWFzb24pOworICAgIH0KKworICAgIFN0cmluZyBzZXJ2ZXJTZXRDb29r
aWUgPSBtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCk7CisgICAgaWYgKCFzZXJ2ZXJTZXRD
b29raWUuaXNFbXB0eSgpKQorICAgICAgICBtX2NoYW5uZWwuc2Vzc2lvbigpLT5uZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKS0+c2V0Q29va2llc0Zyb21IVFRQUmVzcG9uc2UobV9yZXF1ZXN0LmZpcnN0
UGFydHlGb3JDb29raWVzKCksIG1fcmVxdWVzdC51cmwoKSwgc2VydmVyU2V0Q29va2llKTsKKwor
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmVkOworICAgIG1fZGlkQ29tcGxldGVPcGVuaW5nSGFu
ZHNoYWtlID0gdHJ1ZTsKKworICAgIG1fY2hhbm5lbC5kaWRDb25uZWN0KG1faGFuZHNoYWtlLT5z
ZXJ2ZXJXZWJTb2NrZXRQcm90b2NvbCgpLCBtX2hhbmRzaGFrZS0+YWNjZXB0ZWRFeHRlbnNpb25z
KCkpOworICAgIG1fY2hhbm5lbC5kaWRSZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2UoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZShtX2hhbmRzaGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSkp
OworCisgICAgbV9oYW5kc2hha2UgPSBudWxscHRyOworICAgIHJldHVybiB0cnVlOworfQorCitz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gV2ViU29ja2V0VGFzazo6cmVjZWl2ZUZyYW1lcyhGdW5jdGlv
bjx2b2lkKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGUsIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpPcGVuZWQg
JiYgbV9zdGF0ZSAhPSBTdGF0ZTo6Q2xvc2luZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHdoaWxlIChtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpICYmICFtX3Nob3VsZERpc2Nh
cmRSZWNlaXZlZERhdGEgJiYgIW1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlKSB7CisgICAgICAg
IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lIGZyYW1lOworICAgICAgICBjb25zdCB1aW50OF90KiBm
cmFtZUVuZDsKKyAgICAgICAgU3RyaW5nIGVycm9yU3RyaW5nOworICAgICAgICBhdXRvIHBhcnNl
UmVzdWx0ID0gV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6OnBhcnNlRnJhbWUocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4obV9yZWNlaXZlQnVmZmVyLmRhdGEoKSksIG1fcmVjZWl2ZUJ1ZmZlci5z
aXplKCksIGZyYW1lLCBmcmFtZUVuZCwgZXJyb3JTdHJpbmcpOworICAgICAgICBpZiAocGFyc2VS
ZXN1bHQgPT0gV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6OkZyYW1lSW5jb21wbGV0ZSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGlmIChwYXJzZVJlc3VsdCA9PSBX
ZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6RnJhbWVFcnJvcikKKyAgICAgICAgICAgIHJldHVybiBl
cnJvclN0cmluZzsKKworICAgICAgICBhdXRvIGluZmxhdGVSZXN1bHQgPSBtX2RlZmxhdGVGcmFt
ZXIuaW5mbGF0ZShmcmFtZSk7CisgICAgICAgIGlmICghaW5mbGF0ZVJlc3VsdC0+c3VjY2VlZGVk
KCkpCisgICAgICAgICAgICByZXR1cm4gaW5mbGF0ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpOwor
CisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlUmVzdWx0ID0gdmFsaWRhdGVGcmFtZShmcmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gKnZhbGlkYXRlUmVzdWx0OworCisgICAgICAgIGlmICghZnJh
bWUuZmluYWwgfHwgZnJhbWUub3BDb2RlID09IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENv
ZGVDb250aW51YXRpb24pIHsKKyAgICAgICAgICAgIGlmIChmcmFtZS5vcENvZGUgIT0gV2ViQ29y
ZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNvbnRpbnVhdGlvbikgeworICAgICAgICAgICAgICAg
IG1faGFzQ29udGludW91c0ZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NvbnRpbnVv
dXNGcmFtZU9wQ29kZSA9IGZyYW1lLm9wQ29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbV9jb250aW51b3VzRnJhbWVEYXRhLmFwcGVuZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXls
b2FkTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKGZyYW1lLmZpbmFsKSB7CisgICAgICAgICAg
ICAgICAgY2FsbGJhY2sobV9jb250aW51b3VzRnJhbWVPcENvZGUsIG1fY29udGludW91c0ZyYW1l
RGF0YS5kYXRhKCksIG1fY29udGludW91c0ZyYW1lRGF0YS5zaXplKCkpOworICAgICAgICAgICAg
ICAgIG1faGFzQ29udGludW91c0ZyYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9jb250
aW51b3VzRnJhbWVEYXRhLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgY2FsbGJhY2soZnJhbWUub3BDb2RlLCBmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKTsKKworICAgICAgICBpZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5KCkp
CisgICAgICAgICAgICBza2lwUmVjZWl2ZWRCdWZmZXIoZnJhbWVFbmQgLSBtX3JlY2VpdmVCdWZm
ZXIuZGF0YSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gV2ViU29ja2V0VGFzazo6dmFsaWRhdGVGcmFtZShjb25zdCBXZWJD
b3JlOjpXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKFdlYkNvcmU6OldlYlNvY2tl
dEZyYW1lOjppc1Jlc2VydmVkT3BDb2RlKGZyYW1lLm9wQ29kZSkpCisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKCJVbnJlY29nbml6ZWQgZnJhbWUgb3Bjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZnJhbWUub3BDb2RlKSk7CisKKyAgICBpZiAoZnJhbWUucmVzZXJ2ZWQyIHx8IGZyYW1l
LnJlc2VydmVkMykKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIk9uZSBvciBtb3JlIHJlc2Vy
dmVkIGJpdHMgYXJlIG9uOiByZXNlcnZlZDIgPSAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJh
bWUucmVzZXJ2ZWQyKSwgIiwgcmVzZXJ2ZWQzID0gIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZy
YW1lLnJlc2VydmVkMykpOworCisgICAgaWYgKGZyYW1lLm1hc2tlZCkKKyAgICAgICAgcmV0dXJu
ICAiQSBzZXJ2ZXIgbXVzdCBub3QgbWFzayBhbnkgZnJhbWVzIHRoYXQgaXQgc2VuZHMgdG8gdGhl
IGNsaWVudC4iX3M7CisKKyAgICAvLyBBbGwgY29udHJvbCBmcmFtZXMgbXVzdCBub3QgYmUgZnJh
Z21lbnRlZC4KKyAgICBpZiAoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6OmlzQ29udHJvbE9wQ29k
ZShmcmFtZS5vcENvZGUpICYmICFmcmFtZS5maW5hbCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlJlY2VpdmVkIGZyYWdtZW50ZWQgY29udHJvbCBmcmFtZTogb3Bjb2RlID0gIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGZyYW1lLm9wQ29kZSkpOworCisgICAgLy8gQWxsIGNvbnRyb2wgZnJh
bWVzIG11c3QgaGF2ZSBhIHBheWxvYWQgb2YgMTI1IGJ5dGVzIG9yIGxlc3MsIHdoaWNoIG1lYW5z
IHRoZSBmcmFtZSBtdXN0IG5vdCBjb250YWluCisgICAgLy8gdGhlICJleHRlbmRlZCBwYXlsb2Fk
IGxlbmd0aCIgZmllbGQuCisgICAgaWYgKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRy
b2xPcENvZGUoZnJhbWUub3BDb2RlKSAmJiBXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6bmVlZHNF
eHRlbmRlZExlbmd0aEZpZWxkKGZyYW1lLnBheWxvYWRMZW5ndGgpKQorICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiUmVjZWl2ZWQgY29udHJvbCBmcmFtZSBoYXZpbmcgdG9vIGxvbmcgcGF5bG9h
ZDogIiwgZnJhbWUucGF5bG9hZExlbmd0aCwgIiBieXRlcyIpOworCisgICAgLy8gQSBuZXcgZGF0
YSBmcmFtZSBpcyByZWNlaXZlZCBiZWZvcmUgdGhlIHByZXZpb3VzIGNvbnRpbnVvdXMgZnJhbWUg
ZmluaXNoZXMuCisgICAgLy8gTm90ZSB0aGF0IGNvbnRyb2wgZnJhbWVzIGFyZSBhbGxvd2VkIHRv
IGNvbWUgaW4gdGhlIG1pZGRsZSBvZiBjb250aW51b3VzIGZyYW1lcy4KKyAgICBpZiAobV9oYXND
b250aW51b3VzRnJhbWUgJiYgZnJhbWUub3BDb2RlICE9IFdlYkNvcmU6OldlYlNvY2tldEZyYW1l
OjpPcENvZGVDb250aW51YXRpb24gJiYgIVdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRy
b2xPcENvZGUoZnJhbWUub3BDb2RlKSkKKyAgICAgICAgcmV0dXJuICJSZWNlaXZlZCBuZXcgZGF0
YSBmcmFtZSBidXQgcHJldmlvdXMgY29udGludW91cyBmcmFtZSBpcyB1bmZpbmlzaGVkLiJfczsK
KworICAgIC8vIEFuIHVuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVkIHdp
dGhvdXQgYW55IGxlYWRpbmcgZnJhbWUuCisgICAgaWYgKCFtX2hhc0NvbnRpbnVvdXNGcmFtZSAm
JiBmcmFtZS5vcENvZGUgPT0gV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNvbnRpbnVh
dGlvbikKKyAgICAgICAgcmV0dXJuICJSZWNlaXZlZCB1bmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBm
cmFtZS4iX3M7CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit2b2lkIFdlYlNvY2tl
dFRhc2s6OnNlbmRDbG9zaW5nSGFuZHNoYWtlSWZOZWVkZWQoaW50MzJfdCBjb2RlLCBjb25zdCBT
dHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZjsKKyAgICBpZiAoIW1fcmVj
ZWl2ZWRDbG9zaW5nSGFuZHNoYWtlICYmIGNvZGUgIT0gV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5l
bDo6Q2xvc2VFdmVudENvZGU6OkNsb3NlRXZlbnRDb2RlTm90U3BlY2lmaWVkKSB7CisgICAgICAg
IHVuc2lnbmVkIGNoYXIgaGlnaEJ5dGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oY29k
ZSkgPj4gODsKKyAgICAgICAgdW5zaWduZWQgY2hhciBsb3dCeXRlID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KGNvZGUpOworICAgICAgICBidWYuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+
KGhpZ2hCeXRlKSk7CisgICAgICAgIGJ1Zi5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4obG93Qnl0
ZSkpOworICAgICAgICBhdXRvIHJlYXNvblVURjggPSByZWFzb24udXRmOCgpOworICAgICAgICBi
dWYuYXBwZW5kKHJlYXNvblVURjguZGF0YSgpLCByZWFzb25VVEY4Lmxlbmd0aCgpKTsKKyAgICB9
CisKKyAgICBpZiAoIXNlbmRGcmFtZShXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6T3BDb2RlQ2xv
c2UsIGJ1Zi5kYXRhKCksIGJ1Zi5zaXplKCkpKQorICAgICAgICBkaWRGYWlsKCJGYWlsZWQgdG8g
c2VuZCBXZWJTb2NrZXQgZnJhbWUuIik7CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3Npbmc7
CisgICAgbV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSA9IHRydWU7Cit9CisKK2Jvb2wgV2ViU29j
a2V0VGFzazo6c2VuZEZyYW1lKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGUgb3BDb2Rl
LCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBpZiAobV9k
aWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBXZWJD
b3JlOjpXZWJTb2NrZXRGcmFtZSBmcmFtZShvcENvZGUsIHRydWUsIGZhbHNlLCB0cnVlLCBkYXRh
LCBkYXRhTGVuZ3RoKTsKKworICAgIGF1dG8gZGVmbGF0ZVJlc3VsdCA9IG1fZGVmbGF0ZUZyYW1l
ci5kZWZsYXRlKGZyYW1lKTsKKyAgICBpZiAoIWRlZmxhdGVSZXN1bHQtPnN1Y2NlZWRlZCgpKSB7
CisgICAgICAgIGRpZEZhaWwoZGVmbGF0ZVJlc3VsdC0+ZmFpbHVyZVJlYXNvbigpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiBmcmFtZURhdGE7
CisgICAgZnJhbWUubWFrZUZyYW1lRGF0YShmcmFtZURhdGEpOworCisgICAgYXV0byBidWZmZXIg
PSBtYWtlVW5pcXVlQXJyYXk8dWludDhfdD4oZnJhbWVEYXRhLnNpemUoKSk7CisgICAgbWVtY3B5
KGJ1ZmZlci5nZXQoKSwgZnJhbWVEYXRhLmRhdGEoKSwgZnJhbWVEYXRhLnNpemUoKSk7CisKKyAg
ICBtX3NjaGVkdWxlci5zZW5kKG1fc3RyZWFtSUQsIFdURk1vdmUoYnVmZmVyKSwgZnJhbWVEYXRh
LnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlk
RmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9yZWNlaXZlZERpZEZhaWwp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVjZWl2ZWREaWRGYWlsID0gdHJ1ZTsKKworICAg
IC8vIEh5YmktMTAgc3BlY2lmaWNhdGlvbiBleHBsaWNpdGx5IHN0YXRlcyB3ZSBtdXN0IG5vdCBj
b250aW51ZSB0byBoYW5kbGUgaW5jb21pbmcgZGF0YQorICAgIC8vIG9uY2UgdGhlIFdlYlNvY2tl
dCBjb25uZWN0aW9uIGlzIGZhaWxlZCAoc2VjdGlvbiA3LjEuNykuCisgICAgbV9zaG91bGREaXNj
YXJkUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAgICBpZiAoIW1fcmVjZWl2ZUJ1ZmZlci5pc0VtcHR5
KCkpCisgICAgICAgIHNraXBSZWNlaXZlZEJ1ZmZlcihtX3JlY2VpdmVCdWZmZXIuc2l6ZSgpKTsg
Ly8gU2F2ZSBtZW1vcnkuCisgICAgbV9kZWZsYXRlRnJhbWVyLmRpZEZhaWwoKTsKKyAgICBtX2hh
c0NvbnRpbnVvdXNGcmFtZSA9IGZhbHNlOworICAgIG1fY29udGludW91c0ZyYW1lRGF0YS5jbGVh
cigpOworCisgICAgbV9jaGFubmVsLmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IocmVhc29uKTsKKyAg
ICBkaWRDbG9zZShXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZTo6Q2xv
c2VFdmVudENvZGVBYm5vcm1hbENsb3N1cmUsIHsgfSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFz
azo6ZGlkQ2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBk
ZXN0cnVjdFN0cmVhbSgpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDbG9zZWQ7CisKKyAgICBjYWxs
T25NYWluUnVuTG9vcChbdGhpcywgY29kZSwgcmVhc29uXSB7CisgICAgICAgIG1fY2hhbm5lbC5k
aWRDbG9zZShjb2RlLCByZWFzb24pOworICAgIH0pOworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6
OmRlc3RydWN0U3RyZWFtKCkKK3sKKyAgICBpZiAoaXNTdHJlYW1JbnZhbGlkYXRlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NjaGVkdWxlci5kZXN0cm95U3RyZWFtKG1fc3RyZWFtSUQp
OworICAgIG1fc3RyZWFtSUQgPSBXZWJDb3JlOjppbnZhbGlkQ3VybFN0cmVhbUlEOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY3VybC9XZWJTb2NrZXRUYXNrQ3VybC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tDdXJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi42OTJmNGUxNGMyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvV2ViU29ja2V0VGFza0N1cmwuaApAQCAtMCwwICsxLDEy
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRhdGFSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRUYXNrLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9D
dXJsU3RyZWFtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYlNv
Y2tldERlZmxhdGVGcmFtZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldEhhbmRzaGFr
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDdXJsU3RyZWFtU2NoZWR1bGVy
OworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
TmV0d29ya1NvY2tldENoYW5uZWw7CitzdHJ1Y3QgU2Vzc2lvblNldDsKKworY2xhc3MgV2ViU29j
a2V0VGFzayA6IHB1YmxpYyBXZWJDb3JlOjpDdXJsU3RyZWFtOjpDbGllbnQgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdlYlNvY2tldFRhc2soTmV0d29ya1Nv
Y2tldENoYW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sKTsKKyAgICB+V2ViU29ja2V0VGFzaygpOworCisgICAgdm9pZCBzZW5kU3Ry
aW5nKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBzZW5kRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xvc2UoaW50MzJfdCBjb2RlLCBjb25z
dCBTdHJpbmcmIHJlYXNvbik7CisKKyAgICB2b2lkIGNhbmNlbCgpOworICAgIHZvaWQgcmVzdW1l
KCk7CisKKyAgICBTZXNzaW9uU2V0KiBzZXNzaW9uU2V0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQor
Citwcml2YXRlOgorICAgIGVudW0gY2xhc3MgU3RhdGUgeworICAgICAgICBDb25uZWN0aW5nLAor
ICAgICAgICBIYW5kc2hha2luZywKKyAgICAgICAgT3BlbmVkLAorICAgICAgICBDbG9zaW5nLAor
ICAgICAgICBDbG9zZWQKKyAgICB9OworCisgICAgdm9pZCBkaWRPcGVuKFdlYkNvcmU6OkN1cmxT
dHJlYW1JRCkgZmluYWw7CisgICAgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpDdXJsU3RyZWFt
SUQsIHNpemVfdCkgZmluYWwgeyB9OworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6
Q3VybFN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImKSBmaW5hbDsKKyAgICB2
b2lkIGRpZEZhaWwoV2ViQ29yZTo6Q3VybFN0cmVhbUlELCBDVVJMY29kZSkgZmluYWw7CisKKyAg
ICBib29sIGFwcGVuZFJlY2VpdmVkQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYp
OworICAgIHZvaWQgc2tpcFJlY2VpdmVkQnVmZmVyKHNpemVfdCBsZW4pOworCisgICAgRXhwZWN0
ZWQ8Ym9vbCwgU3RyaW5nPiB2YWxpZGF0ZU9wZW5pbmdIYW5kc2hha2UoKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gcmVjZWl2ZUZyYW1lcyhGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OldlYlNv
Y2tldEZyYW1lOjpPcENvZGUsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmKTsKKyAgICBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gdmFsaWRhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpXZWJTb2NrZXRG
cmFtZSYpOworCisgICAgYm9vbCBzZW5kRnJhbWUoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9w
Q29kZSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpOworICAgIHZvaWQg
c2VuZENsb3NpbmdIYW5kc2hha2VJZk5lZWRlZChpbnQzMl90LCBjb25zdCBTdHJpbmcmIHJlYXNv
bik7CisKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgU3RyaW5nJiByZWFzb24pOworICAgIHZvaWQg
ZGlkQ2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbik7CisKKyAgICBib29s
IGlzU3RyZWFtSW52YWxpZGF0ZWQoKSB7IHJldHVybiBtX3N0cmVhbUlEID09IFdlYkNvcmU6Omlu
dmFsaWRDdXJsU3RyZWFtSUQ7IH0KKyAgICB2b2lkIGRlc3RydWN0U3RyZWFtKCk7CisKKyAgICBO
ZXR3b3JrU29ja2V0Q2hhbm5lbCYgbV9jaGFubmVsOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCBtX3JlcXVlc3Q7CisgICAgU3RyaW5nIG1fcHJvdG9jb2w7CisKKyAgICBXZWJDb3JlOjpD
dXJsU3RyZWFtU2NoZWR1bGVyJiBtX3NjaGVkdWxlcjsKKyAgICBXZWJDb3JlOjpDdXJsU3RyZWFt
SUQgbV9zdHJlYW1JRCB7IFdlYkNvcmU6OmludmFsaWRDdXJsU3RyZWFtSUQgfTsKKworICAgIFN0
YXRlIG1fc3RhdGUgeyBTdGF0ZTo6Q29ubmVjdGluZyB9OworCisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZT4gbV9oYW5kc2hha2U7CisgICAgV2ViQ29yZTo6
V2ViU29ja2V0RGVmbGF0ZUZyYW1lciBtX2RlZmxhdGVGcmFtZXI7CisKKyAgICBib29sIG1fZGlk
Q29tcGxldGVPcGVuaW5nSGFuZHNoYWtlIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9zaG91bGRE
aXNjYXJkUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9yZWNl
aXZlQnVmZmVyOworCisgICAgYm9vbCBtX2hhc0NvbnRpbnVvdXNGcmFtZSB7IGZhbHNlIH07Cisg
ICAgV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBtX2NvbnRpbnVvdXNGcmFtZU9wQ29k
ZSB7IFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjpPcENvZGU6Ok9wQ29kZUludmFsaWQgfTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gbV9jb250aW51b3VzRnJhbWVEYXRhOworCisgICAgYm9vbCBtX3Jl
Y2VpdmVkQ2xvc2luZ0hhbmRzaGFrZSB7IGZhbHNlIH07CisgICAgaW50MzJfdCBtX2Nsb3NlRXZl
bnRDb2RlIHsgV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGU6OkNsb3Nl
RXZlbnRDb2RlTm90U3BlY2lmaWVkIH07CisgICAgU3RyaW5nIG1fY2xvc2VFdmVudFJlYXNvbjsK
KworICAgIGJvb2wgbV9kaWRTZW5kQ2xvc2luZ0hhbmRzaGFrZSB7IGZhbHNlIH07CisgICAgYm9v
bCBtX3JlY2VpdmVkRGlkRmFpbCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQppbmRleCA5YTJhZTJjMWFl
NzQuLmM1YjM4YjM5MGUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBsYXlT
dGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFr
ZQpAQCAtNDgsNiArNDgsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIE5ldHdv
cmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAogICAgIE5ldHdvcmtQcm9jZXNz
L2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJs
L05ldHdvcmtTZXNzaW9uQ3VybC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tl
dFRhc2tDdXJsLmNwcAogCiAgICAgUGxhdGZvcm0vSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3Bw
CiAgICAgUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdp
bi5jbWFrZQppbmRleCA2NTkzNDVlZGVjMTAuLjkyZmE4MWIxYjE0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCkBAIC0xNjUsNiArMTY1LDcgQEAgaWYgKCR7V1RGX1BMQVRGT1JNX1dJTl9DQUlS
T30pCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAog
ICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzTWFpbkN1cmwuY3BwCiAg
ICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAorICAgICAg
ICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1dlYlNvY2tldFRhc2tDdXJsLmNwcAogCiAgICAgICAgIFNo
YXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwCiAK
</data>
<flag name="review"
          id="482015"
          type_id="1"
          status="-"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="482022"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>