<?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>105973</bug_id>
          
          <creation_ts>2013-01-02 17:03:28 -0800</creation_ts>
          <short_desc>Revert auto-start plugins to snapshotted plugins after a period of inactivity</short_desc>
          <delta_ts>2013-01-03 15:22:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.8</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>106042</dependson>
    
    <dependson>106049</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>beidson</cc>
    
    <cc>bweinstein</cc>
    
    <cc>mjs</cc>
    
    <cc>mkwst+watchlist</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>799092</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-01-02 17:03:28 -0800</bug_when>
    <thetext>Keep track of when the user interacts with a plugin, and keep those plugins auto-starting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799093</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-01-02 17:03:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/12947865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799252</commentid>
    <comment_count>2</comment_count>
      <attachid>181147</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-01-02 21:51:18 -0800</bug_when>
    <thetext>Created attachment 181147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799255</commentid>
    <comment_count>3</comment_count>
      <attachid>181148</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-01-02 21:55:32 -0800</bug_when>
    <thetext>Created attachment 181148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799591</commentid>
    <comment_count>4</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-01-03 13:01:59 -0800</bug_when>
    <thetext>Committed r138729: &lt;http://trac.webkit.org/changeset/138729&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799641</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-03 13:50:14 -0800</bug_when>
    <thetext>It appears that this patch broke a bunch of plugins tests. e.g.
http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK2%20(Tests)/r138729%20(4433)/results.html

CRASHING TEST: fast/replaced/no-focus-ring-object.html

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebKit2             	0x00000001090d27a1 WebKit::WebProcess::plugInDidReceiveUserInteraction(unsigned int) + 39 (WebProcess.cpp:824)
1   com.apple.WebKit2             	0x000000010903186d WebKit::PluginView::handleEvent(WebCore::Event*) + 1193 (PluginView.cpp:840)
2   com.apple.WebCore             	0x0000000109f20eaf WebCore::HTMLPlugInElement::defaultEventHandler(WebCore::Event*) + 143 (RefCounted.h:62)
3   com.apple.WebCore             	0x0000000109de7013 WebCore::EventDispatcher::dispatchEventPostProcess(WTF::PassRefPtr&lt;WebCore::Event&gt;, void*) + 275 (PassRefPtr.h:77)
4   com.apple.WebCore             	0x0000000109de6dff WebCore::EventDispatcher::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;) + 1311 (PassRefPtr.h:68)
5   com.apple.WebCore             	0x000000010a3e81f3 WebCore::MouseEventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const + 323 (PassRefPtr.h:68)
6   com.apple.WebCore             	0x0000000109de53cc WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::EventDispatchMediator&gt;) + 156 (EventDispatcher.cpp:135)
7   com.apple.WebCore             	0x000000010a3fc591 WebCore::Node::dispatchMouseEvent(WebCore::PlatformMouseEvent const&amp;, WTF::AtomicString const&amp;, int, WebCore::Node*) + 129 (Node.cpp:2386)
8   com.apple.WebCore             	0x0000000109dee40e WebCore::EventHandler::dispatchMouseEvent(WTF::AtomicString const&amp;, WebCore::Node*, bool, int, WebCore::PlatformMouseEvent const&amp;, bool) + 110 (EventHandler.cpp:2212)
9   com.apple.WebCore             	0x0000000109dedfe0 WebCore::EventHandler::handleMousePressEvent(WebCore::PlatformMouseEvent const&amp;) + 1344 (EventHandler.cpp:1515)
10  com.apple.WebKit2             	0x0000000109089a5a WebKit::handleMouseEvent(WebKit::WebMouseEvent const&amp;, WebKit::WebPage*, bool) + 157 (WebPage.cpp:1520)
11  com.apple.WebKit2             	0x0000000109089c0e WebKit::WebPage::mouseEventSyncForTesting(WebKit::WebMouseEvent const&amp;, bool&amp;) + 104 (WebPage.cpp:1583)
12  com.apple.WebKit2             	0x000000010909c666 void CoreIPC::handleMessage&lt;Messages::WebPage::MouseEventSyncForTesting, WebKit::WebPage, void (WebKit::WebPage::*)(WebKit::WebMouseEvent const&amp;, bool&amp;)&gt;(CoreIPC::MessageDecoder&amp;, CoreIPC::MessageEncoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WebKit::WebMouseEvent const&amp;, bool&amp;)) + 91 (Arguments.h:62)
13  com.apple.WebKit2             	0x000000010910cbc8 CoreIPC::MessageReceiverMap::dispatchSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;, WTF::OwnPtr&lt;CoreIPC::MessageEncoder&gt;&amp;) + 150 (MessageReceiverMap.cpp:103)
14  com.apple.WebKit2             	0x0000000108fe2b23 CoreIPC::Connection::dispatchSyncMessage(CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;) + 141 (OwnPtr.h:78)
15  com.apple.WebKit2             	0x0000000108fe17a7 CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::MessageDecoder&gt;&amp;) + 103 (Connection.cpp:682)
16  com.apple.WebKit2             	0x0000000108fe171b CoreIPC::Connection::SyncMessageState::dispatchMessages() + 139 (Connection.cpp:166)
17  com.apple.WebKit2             	0x0000000108fe25a4 CoreIPC::Connection::waitForSyncReply(unsigned long long, double, unsigned int) + 184 (Locker.h:38)
18  com.apple.WebKit2             	0x0000000108fe248e CoreIPC::Connection::sendSyncMessage(CoreIPC::MessageID, unsigned long long, WTF::PassOwnPtr&lt;CoreIPC::MessageEncoder&gt;, double, unsigned int) + 338 (PassOwnPtr.h:90)
19  com.apple.WebKit2             	0x0000000108ff440d WebKit::InjectedBundle::postSynchronousMessage(WTF::String const&amp;, WebKit::APIObject*, WTF::RefPtr&lt;WebKit::APIObject&gt;&amp;) + 189 (PassOwnPtr.h:90)
20  com.apple.WebKit2             	0x00000001090e75c3 WKBundlePostSynchronousMessage + 66 (RefPtr.h:56)
21  WebKitTestRunnerInjectedBundle	0x000000010d88343c WTR::EventSendingController::mouseDown(int, OpaqueJSValue const*) + 112 (EventSendingController.cpp:164)
22  WebKitTestRunnerInjectedBundle	0x000000010d8844bd WTR::JSEventSendingController::mouseDown(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 99 (JSEventSendingController.cpp:89)
23  com.apple.JavaScriptCore      	0x00000001096f3e6f JSC::JSCallbackFunction::call(JSC::ExecState*) + 431 (JSCallbackFunction.cpp:72)
24  com.apple.JavaScriptCore      	0x000000010980d62e JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*) + 206 (LLIntSlowPaths.cpp:1362)
25  com.apple.JavaScriptCore      	0x00000001098119fb llint_op_call + 169
26  com.apple.JavaScriptCore      	0x00000001096a02b0 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*) + 3840 (JSValueInlines.h:360)
27  com.apple.JavaScriptCore      	0x00000001095ef720 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*) + 512 (Completion.cpp:75)
28  com.apple.WebCore             	0x000000010a5e55c0 WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld*) + 448 (JSMainThreadExecState.h:77)
29  com.apple.WebCore             	0x000000010a5e5749 WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&amp;) + 41 (ScriptController.cpp:158)
30  com.apple.WebCore             	0x000000010a5ee773 WebCore::ScriptElement::executeScript(WebCore::ScriptSourceCode const&amp;) + 467 (ScriptValue.h:51)
31  com.apple.WebCore             	0x0000000109f25418 WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent(WebCore::PendingScript&amp;) + 216 (HTMLScriptRunner.cpp:140)
32  com.apple.WebCore             	0x0000000109f25323 WebCore::HTMLScriptRunner::executeParsingBlockingScript() + 259 (HTMLScriptRunner.cpp:118)
33  com.apple.WebCore             	0x0000000109f259e8 WebCore::HTMLScriptRunner::executeParsingBlockingScripts() + 24 (RefPtr.h:58)
34  com.apple.WebCore             	0x0000000109ed2abf WebCore::HTMLDocumentParser::notifyFinished(WebCore::CachedResource*) + 63 (HTMLDocumentParser.cpp:515)
35  com.apple.WebCore             	0x0000000109b78f7d WebCore::CachedResource::checkNotify() + 93 (CachedResource.cpp:336)
36  com.apple.WebCore             	0x000000010a6bb3ff WebCore::SubresourceLoader::didFinishLoading(double) + 143 (PassRefPtr.h:68)
37  com.apple.Foundation          	0x00007fff88440f58 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 28
38  com.apple.Foundation          	0x00007fff88440e9c -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 227
39  com.apple.Foundation          	0x00007fff88440d98 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 63
40  com.apple.CFNetwork           	0x00007fff8d772fd1 ___delegate_didFinishLoading_block_invoke_0 + 40
41  com.apple.CFNetwork           	0x00007fff8d765753 ___withDelegateAsync_block_invoke_0 + 90
42  com.apple.CFNetwork           	0x00007fff8d7f42ca __block_global_1 + 28
43  com.apple.CoreFoundation      	0x00007fff8d46d724 CFArrayApplyFunction + 68
44  com.apple.CFNetwork           	0x00007fff8d756a6c RunloopBlockContext::perform() + 126</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181147</attachid>
            <date>2013-01-02 21:51:18 -0800</date>
            <delta_ts>2013-01-02 21:55:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105973-20130102214825.patch</filename>
            <type>text/plain</type>
            <size>68944</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE5MjUyM2RkZWMzNDRi
YjAzMjQ1NGQzN2UxNTk4N2IwN2M2YTg0Yi4uY2Q5ODg5ODEwN2JiYWQ1OTg0ZDI4NDgxMTk0YmFm
YTY2Njk0NjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTAyICBKb24g
TGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZlcnQgYXV0by1zdGFydCBwbHVn
aW5zIHRvIHNuYXBzaG90dGVkIHBsdWdpbnMgYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1OTczCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk0Nzg2NT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50OjpwbHVnSW5PcmlnaW5IYXNoKTogRXhw
b3NlIHB1YmxpY2x5IGZvciBXZWJLaXQyLgorICAgICAgICBSZW9yZ2FuaXplIHRoZSBwcm90ZWN0
ZWQgbWVtYmVycyBvZiB0aGUgY2xhc3MuCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6IE1vdmUgdGhlIG1lbWJlciB0byBIVE1MUGx1Z0luRWxlbWVudC4KKwogMjAxMy0w
MS0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gVjhE
T01XcmFwcGVyLmNwcCBoYXMgbWFueSBtb3JlIGluY2x1ZGVzIHRoYW4gbmVjZXNzYXJ5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZjFiYzM5MmYzNjU3M2VmZTQ1Y2Y3OTljYzYxMThiN2FjZDk4NTU2MS4uNzljYWU4
ODdjYTY5YzQ4ZGI5ZGRmMGMzNjk2NjUwNDQ1MWM1YTFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDc3IEBACisyMDEzLTAxLTAyICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZlcnQgYXV0by1zdGFydCBwbHVnaW5zIHRvIHNuYXBzaG90dGVkIHBsdWdpbnMgYWZ0ZXIg
YSBwZXJpb2Qgb2YgaW5hY3Rpdml0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1OTczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk0Nzg2NT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2Ug
dGhlIHNldCBvZiBvcmlnaW4gaGFzaGVzIG1haW50YWluZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHRv
IGEgaGFzaCBtYXAgdGhhdCBhc3NvY2lhdGVzCisgICAgICAgIGEgdGltZXN0YW1wIGZvciBlYWNo
IGhhc2guIElmIHRoZSBwbHVnLWluJ3Mgb3JpZ2luIGlzIG1hcmtlZCBmb3IgYXV0by1zdGFydCwg
d2UgYWxzbyBjaGVjaworICAgICAgICBpdCBhZ2FpbnN0IHRoZSB0aW1lc3RhbXAuIElmIHRoZSB0
aW1lIGlzIGxhdGVyLCB0aGVuIHdlIGNvbnNpZGVyIHRoZSBlbnRyeSBzdGFsZSwgYW5kIHNuYXBz
aG90CisgICAgICAgIHRoZSBwbHVnLWluIGluc3RlYWQuCisKKyAgICAgICAgQnV0LCBpZiB0aGUg
dXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgcGx1Zy1pbiwgd2UgZGVsYXkgdGhhdCBleHBpcmF0aW9u
IHRpbWVzdGFtcCBvdXQsIHNvIHRoYXQKKyAgICAgICAgaXQgZXhwaXJlcyBhIG1vbnRoIGZyb20g
Zmlyc3QgaW50ZXJhY3Rpb24uIFRvIGF2b2lkIHRvbyBtdWNoIGNoYXR0ZXIgYmV0d2VlbiB0aGUg
d2ViIHByb2Nlc3NlcworICAgICAgICBhbmQgVUkgcHJvY2Vzcywgd2Ugb25seSB1cGRhdGUgdGhl
IHRpbWVzdGFtcCBpZiBhIGRheSBhIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhl
CisgICAgICAgIHRpbWVzdGFtcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3Lmg6CisgICAgICAgIChQbHVnaW5WaWV3KTogQWRkIGEgbWVtYmVyIHZhcmlhYmxlIHRv
IGZsYWcgd2hldGhlciB0aGUgdXNlciBoYWQgaW50ZXJhY3RlZCB3aXRoIHRoZSBwbHVnLWluLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6UGx1Z2luVmlldyk6IEluaXRpYWxpemUgdGhlIGZsYWcgdG8gZmFs
c2UuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KTogV2UgY29uc2lk
ZXIgbW91c2UgZG93biwgdXAsIHdoZWVsLCBjb250ZXh0IG1lbnUsIGFuZCBrZXlib2FyZAorICAg
ICAgICBldmVudHMgYXMgdXNlciBpbnRlcmFjdGlvbi4gRG8gbm90IGNvbnNpZGVyIG1vdXNlIGVu
dGVyLCBsZWF2ZSwgYW5kIG1vdmUgZXZlbnRzIGFzIHVzZXIKKyAgICAgICAgaW50ZXJhY3Rpb24u
IEFsc28sIHJlbW92ZSB1bm5lZWRlZCBjb21tZW50cy4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
Vmlldzo6cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbik6IElmIHRoaXMgaXMgdGhlIGZp
cnN0IHRpbWUgdGhlIGZ1bmN0aW9uIGlzCisgICAgICAgIGNhbGxlZCwgdGVsbCB0aGUgd2ViIHBy
b2Nlc3MsIHNvIHRoYXQgdGhlIGV4cGlyYXRpb24gdGltZXN0YW1wIGNhbiBiZSB1cGRhdGVkLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOiBVcGRhdGUgdGhl
IG1lc3NhZ2VzIHRvIGluY2x1ZGUgdGhlIGV4cGlyYXRpb24gdGltZS4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYlByb2Nlc3MpOiBVcGRhdGUgdGhlIGNh
Y2hlZCBjb3B5IG9mIHRoZSBhdXRvLXN0YXJ0IG9yaWdpbnMgdG8gaW5jbHVkZSB0aGVpciBleHBp
cmF0aW9uCisgICAgICAgIHRpbWVzdGFtcHMuIFVwZGF0ZSB0aGUgbWVzc2FnZSBzaWduYXR1cmVz
LiBBZGQgYSBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIGV4cGlyYXRpb24gdGltZXN0YW1wCisgICAg
ICAgIGZvciBhIHNwZWNpZmljIG9yaWdpbi4gUmVuYW1lIHBsdWdJbkF1dG9TdGFydE9yaWdpbnND
aGFuZ2VkIHRvIHJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFs
aXplV2ViUHJvY2Vzcyk6IEluc3RlYWQgb2YgaW5kaXZpZHVhbGx5IGFkZGluZyB0aGUgb3JpZ2lu
cyBpbiB0aGUKKyAgICAgICAgcHJvdmlkZWQgdmVjdG9yLCBqdXN0IGNhbGwgcmVzZXRQbHVnSW5B
dXRvU3RhcnRPcmlnaW5zKCkuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmlzUGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luKTogQ2hlY2sgdG8gc2VlIGlmIHRoZSBvcmlnaW4gaXMgaW4gdGhlIHRh
YmxlLCBhbmQgaWYKKyAgICAgICAgc28sIGNoZWNrIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0
aGUgZXhwaXJhdGlvbiB0aW1lLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkaWRBZGRQ
bHVnSW5BdXRvU3RhcnRPcmlnaW4pOiBVcGRhdGUgdGhlIGNhY2hlZCB0YWJsZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6cmVzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKTogU3dhcCB0
aGUgdGFibGVzIGJldHdlZW4gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcgorICAgICAgICBhbmQgdGhl
IG1lbWJlciB2YXJpYWJsZS4gV2UgY2FuIHNhZmVseSBkbyB0aGlzIGJlY2F1c2UgdGhlIGZ1bmN0
aW9uIGlzIGNhbGxlZCBpbiB0d28gY2FzZXMgd2hlcmUKKyAgICAgICAgdGhlIHBhcmFtZXRlciBp
cyBhZnRlcndhcmRzIHRocm93biBhd2F5OiB3aGVuIGEgbmV3IHdlYiBwcm9jZXNzIGlzIGNyZWF0
ZWQsIGFuZCB3aGVuIGl0IGlzIGNhbGxlZAorICAgICAgICB0aHJvdWdoIGFuIElQQyBtZXNzYWdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbHVnSW5EaWRSZWNlaXZlVXNlckludGVy
YWN0aW9uKTogV2hlbiBpbnZva2VkLCB3ZSB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvCisgICAgICAg
IHVwZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgZ2l2ZW4gb3JpZ2luIGlmIHRoZSB0
aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZXhwaXJhdGlvbgorICAgICAgICB0aW1lIGFuZCB0
aGUgY3VycmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgdGhyZXNob2xkIHBsdWdJbkF1dG9TdGFy
dEV4cGlyYXRpb25UaW1lVXBkYXRlVGhyZXNob2xkLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvbnRleHQubWVzc2FnZXMuaW46IEFkZCBtZXNzYWdlIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhl
IHdlYiBwcm9jZXNzIHdhbnRzIHRvCisgICAgICAgIHVwZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1l
c3RhbXAgZm9yIHRoZSBwbHVnLWluIG9yaWdpbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsdWdJbkRpZFJlY2VpdmVV
c2VySW50ZXJhY3Rpb24pOiBGb3J3YXJkIHRvIHRoZSBwcm92aWRlci4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViQ29udGV4dC5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpleHBpcmF0aW9uVGltZUZy
b21Ob3cpOiBSZXR1cm5zIGEgbmV3IHRpbWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZSArIDEg
bW9udGguCisgICAgICAgIChXZWJLaXQ6OlBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjphZGRBdXRv
U3RhcnRPcmlnaW4pOiBSZWZhY3Rvci4gU2V0IHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZQor
ICAgICAgICBhZGRlZCBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OlBsdWdJbkF1dG9TdGFydFBy
b3ZpZGVyOjphdXRvU3RhcnRPcmlnaW5zQ29weSk6IFJlZmFjdG9yLgorICAgICAgICAoV2ViS2l0
OjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6YXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSk6IFJl
ZmFjdG9yIHRvIGluY2x1ZGUgdGhlIGV4cGlyYXRpb24KKyAgICAgICAgdGltZXMuIEFsc28sIGNo
ZWNrIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgZXhwaXJhdGlvbiB0aW1lLiBJZiB3ZSBh
cmUgcGFzdCB0aGUgdGltZSwgcmVtb3ZlCisgICAgICAgIHRoZSBlbnRyeSBmcm9tIHRoZSBjb3B5
LgorICAgICAgICAoV2ViS2l0OjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6c2V0QXV0b1N0YXJ0
T3JpZ2luc1RhYmxlKTogUmVmYWN0b3IgdG8gZXh0cmFjdCBhbmQgZHVwbGljYXRlCisgICAgICAg
IHRoZSBwcm92aWRlZCBtYXAgb2Ygb3JpZ2lucyBhbmQgZXhwaXJhdGlvbiB0aW1lc3RhbXBzLgor
ICAgICAgICAoV2ViS2l0OjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6ZGlkUmVjZWl2ZVVzZXJJ
bnRlcmFjdGlvbik6IExvb2sgZm9yIHRoZSBvcmlnaW4gaGFzaC4gSWYgZm91bmQsCisgICAgICAg
IHVwZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lLiBVcGRhdGUgYWxsIGV4aXN0aW5nIHdlYiBwcm9j
ZXNzZXMgd2l0aCB0aGUgbmV3IGV4cGlyYXRpb24gdGltZSwgYW5kCisgICAgICAgIHRlbGwgdGhl
IGNvbnRleHQgY2xpZW50IHRoYXQgdGhlIGhhc2hlcyBoYXZlIGNoYW5nZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuaDoKKyAgICAgICAgKFBs
dWdJbkF1dG9TdGFydFByb3ZpZGVyKTogQ2hhbmdlIHRoZSBtX2F1dG9TdGFydEhhc2hlcyB2YXJp
YWJsZSB0byBhIG1hcCBvZiBhIGhhc2ggdG8gaXRzIGRvbWFpbgorICAgICAgICBlbnRyeSBpbiB0
aGUgYXV0by1zdGFydCB0YWJsZS4gSXQgaXMgdXNlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGF1
dG8tc3RhcnQgdGFibGUgYW5kIHVwZGF0ZQorICAgICAgICB0aGUgb3JpZ2luJ3MgZXhwaXJhdGlv
biB0aW1lLgorCisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aDoKKyAgICAgICAgKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMpOiBTd2l0Y2ggdGhlIGNy
ZWF0aW9uIHBhcmFtZXRlciB0byBzZWVkIHRoZSBvcmlnaW4gdGFibGUgdG8gYSBtYXAuCisKIDIw
MTMtMDEtMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGYWN0b3Ig
b3V0IE5ldHdvcmtQcm9jZXNzIGluaXRpYWxpemF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbiBp
biBwcmVwYXJhdGlvbiBvZiBhZGRpbmcgYSBOZXR3b3JrUHJvY2VzcyBzZXJ2aWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKaW5kZXggNWE2MmQ1NGYzNDMwOTJiZGJjYmZh
MDZkNzcxOTZjNDc5ZmJhYTRkZi4uMTE2MzNjNmE3MzcwYjNkZWYyYjhjZTk1NzA4YTBiMjBkYjZj
Nzc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaApAQCAtNTksNiAr
NTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNuYXBzaG90KFBhc3NSZWZQ
dHI8SW1hZ2U+KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTW91c2VDbGlj
aygpIHsgfQogCisgICAgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGx1Z0luT3JpZ2luSGFzaDsgfQorCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAgICAgTlBPYmplY3QqIGdldE5QT2JqZWN0KCk7CiAjZW5kaWYKQEAgLTgwLDEwICs4MiwxMyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBTdHlsZVByb3BlcnR5U2V0KikgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBib29sIGFyZUF1dGhvclNoYWRvd3NBbGxvd2VkKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgbV9pbkJlZm9yZUxvYWRFdmVudEhhbmRs
ZXI7CiAgICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgdXNlIGd1YXJkZWREaXNwYXRjaEJlZm9yZUxv
YWRFdmVudCBpbnN0ZWFkIG9mIGNhbGxpbmcgZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQgZGlyZWN0
bHkuCiAgICAgYm9vbCBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpOwogCisgICAgYm9vbCBtX2luQmVmb3JlTG9hZEV2ZW50SGFuZGxlcjsKKwor
ICAgIHVuc2lnbmVkIG1fcGx1Z0luT3JpZ2luSGFzaDsKKwogcHJpdmF0ZToKICAgICBib29sIGRp
c3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsgLy8gTm90IGlt
cGxlbWVudGVkLCBnZW5lcmF0ZXMgYSBjb21waWxlIGVycm9yIGlmIHN1YmNsYXNzZXMgY2FsbCB0
aGlzIGJ5IG1pc3Rha2UuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmgKaW5kZXggYWEwYTg2MDVkYTkwNjIwMTI2NzE4MjA1NzBiODk0MzAyMTY5OWY3NC4u
NjU0YjYzZTExNzkyMWQ4ZDgyNGMzNjRlODQwNzhiY2ZkMjQ5OWU1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKQEAgLTEwOCw3ICsxMDgsNiBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9jdXN0b21TdHlsZUZvclBhZ2VDYWNo
ZTsKICAgICBSZWZQdHI8TW91c2VFdmVudD4gbV9wZW5kaW5nQ2xpY2tFdmVudEZyb21TbmFwc2hv
dDsKICAgICBEZWZlcnJhYmxlT25lU2hvdFRpbWVyPEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+IG1f
c2ltdWxhdGVkTW91c2VDbGlja1RpbWVyOwotICAgIHVuc2lnbmVkIG1fcGx1Z0luT3JpZ2luSGFz
aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDllYTcwZDJjMzY4
ZWZlMzhhYTk3OWI1YWRlMWYxZTgyZmY5MTFmZjEuLmI3MjdmNDBiZDhjZDk2NDliMTM2NGI1MjA5
Nzk1NWE1NTc5MmRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0cnVjdCBXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBib29sIHVzZXNOZXR3b3JrUHJvY2VzczsK
ICNlbmRpZgogCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwbHVnSW5BdXRvU3RhcnRPcmlnaW5zOwor
ICAgIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4gcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwCmluZGV4IGEy
NjQ5NzM0ZTBhYTMwZGZhMzc1NDllZTM2MmQ2NDYyY2MzMGZlNDkuLmRkOTdjZThiMTgzZjYwYWI2
MzQ5YzVjN2Y0Y2FlMGE3OWJjZDQxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAKQEAgLTMy
LDYgKzMyLDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBjb25zdCBk
b3VibGUgcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRpbWVUaHJlc2hvbGQgPSAzMCAqIDI0ICog
NjA7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6UGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIoV2ViQ29udGV4dCogY29udGV4dCkKQEAgLTM5LDYgKzQxLDEx
IEBAIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcihXZWJD
b250ZXh0KiBjb250ZXh0KQogewogfQogCitzdGF0aWMgZG91YmxlIGV4cGlyYXRpb25UaW1lRnJv
bU5vdygpCit7CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgKyBwbHVnSW5BdXRvU3RhcnRFeHBp
cmF0aW9uVGltZVRocmVzaG9sZDsKK30KKwogdm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6
YWRkQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1
Z0luT3JpZ2luSGFzaCkKIHsKICAgICBpZiAobV9hdXRvU3RhcnRIYXNoZXMuY29udGFpbnMocGx1
Z0luT3JpZ2luSGFzaCkpCkBAIC00NiwzMiArNTMsNDQgQEAgdm9pZCBQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlcjo6YWRkQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5z
aWcKICAgICAKICAgICBBdXRvU3RhcnRUYWJsZTo6aXRlcmF0b3IgaXQgPSBtX2F1dG9TdGFydFRh
YmxlLmZpbmQocGFnZU9yaWdpbik7CiAgICAgaWYgKGl0ID09IG1fYXV0b1N0YXJ0VGFibGUuZW5k
KCkpCi0gICAgICAgIGl0ID0gbV9hdXRvU3RhcnRUYWJsZS5hZGQocGFnZU9yaWdpbiwgSGFzaFNl
dDx1bnNpZ25lZD4oKSkuaXRlcmF0b3I7CisgICAgICAgIGl0ID0gbV9hdXRvU3RhcnRUYWJsZS5h
ZGQocGFnZU9yaWdpbiwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPigpKS5pdGVyYXRvcjsKKwor
ICAgIGRvdWJsZSBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lRnJvbU5vdygpOworICAg
IGl0LT52YWx1ZS5zZXQocGx1Z0luT3JpZ2luSGFzaCwgZXhwaXJhdGlvblRpbWUpOworICAgIG1f
YXV0b1N0YXJ0SGFzaGVzLnNldChwbHVnSW5PcmlnaW5IYXNoLCBwYWdlT3JpZ2luKTsKICAgICAK
LSAgICBpdC0+dmFsdWUuYWRkKHBsdWdJbk9yaWdpbkhhc2gpOwotICAgIG1fYXV0b1N0YXJ0SGFz
aGVzLmFkZChwbHVnSW5PcmlnaW5IYXNoKTsKLSAgICBtX2NvbnRleHQtPnNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHBs
dWdJbk9yaWdpbkhhc2gpKTsKKyAgICBtX2NvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6RGlkQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHBsdWdJbk9yaWdp
bkhhc2gsIGV4cGlyYXRpb25UaW1lKSk7CiAgICAgbV9jb250ZXh0LT5jbGllbnQoKS5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXNDaGFuZ2VkKG1fY29udGV4dCk7CiB9CiAKLVZlY3Rvcjx1bnNp
Z25lZD4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmF1dG9TdGFydE9yaWdpbnNDb3B5KCkgY29u
c3QKK0hhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmF1
dG9TdGFydE9yaWdpbnNDb3B5KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGNvcHlW
ZWN0b3I7Ci0gICAgY29weVRvVmVjdG9yKG1fYXV0b1N0YXJ0SGFzaGVzLCBjb3B5VmVjdG9yKTsK
LSAgICByZXR1cm4gY29weVZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+IGNv
cHlNYXA7CisgICAgQXV0b1N0YXJ0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYXV0b1N0
YXJ0VGFibGUuZW5kKCk7CisgICAgZm9yIChBdXRvU3RhcnRUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2F1dG9TdGFydFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+Ojpjb25zdF9pdGVyYXRvciBtYXBFbmQgPSBpdC0+
dmFsdWUuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPjo6Y29u
c3RfaXRlcmF0b3IgbWFwSXQgPSBpdC0+dmFsdWUuYmVnaW4oKTsgbWFwSXQgIT0gbWFwRW5kOyAr
K21hcEl0KQorICAgICAgICAgICAgY29weU1hcC5zZXQobWFwSXQtPmtleSwgbWFwSXQtPnZhbHVl
KTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHlNYXA7CiB9CiAKIFBhc3NSZWZQdHI8SW1tdXRhYmxl
RGljdGlvbmFyeT4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmF1dG9TdGFydE9yaWdpbnNUYWJs
ZUNvcHkoKSBjb25zdAogewogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwog
ICAgIEF1dG9TdGFydFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2F1dG9TdGFydFRhYmxl
LmVuZCgpOworICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGZvciAoQXV0b1N0
YXJ0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdXRvU3RhcnRUYWJsZS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gaGFz
aGVzOwotICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3IgdmFsdWVFbmQgPSBpdC0+
dmFsdWUuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yIHZh
bHVlSXQgPSBpdC0+dmFsdWUuYmVnaW4oKTsgdmFsdWVJdCAhPSB2YWx1ZUVuZDsgKyt2YWx1ZUl0
KQotICAgICAgICAgICAgaGFzaGVzLmFwcGVuZChXZWJVSW50NjQ6OmNyZWF0ZSgqdmFsdWVJdCkp
OworICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIGhhc2hNYXA7CisgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT46OmNvbnN0X2l0ZXJhdG9yIHZhbHVlRW5kID0gaXQt
PnZhbHVlLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT46OmNv
bnN0X2l0ZXJhdG9yIHZhbHVlSXQgPSBpdC0+dmFsdWUuYmVnaW4oKTsgdmFsdWVJdCAhPSB2YWx1
ZUVuZDsgKyt2YWx1ZUl0KSB7CisgICAgICAgICAgICBpZiAobm93ID4gdmFsdWVJdC0+dmFsdWUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBoYXNoTWFwLnNldChTdHJp
bmc6Om51bWJlcih2YWx1ZUl0LT5rZXkpLCBXZWJEb3VibGU6OmNyZWF0ZSh2YWx1ZUl0LT52YWx1
ZSkpOworICAgICAgICB9CiAKLSAgICAgICAgbWFwLnNldChpdC0+a2V5LCBJbW11dGFibGVBcnJh
eTo6YWRvcHQoaGFzaGVzKSk7CisgICAgICAgIGlmIChoYXNoTWFwLnNpemUoKSkKKyAgICAgICAg
ICAgIG1hcC5zZXQoaXQtPmtleSwgSW1tdXRhYmxlRGljdGlvbmFyeTo6YWRvcHQoaGFzaE1hcCkp
OwogICAgIH0KIAogICAgIHJldHVybiBJbW11dGFibGVEaWN0aW9uYXJ5OjphZG9wdChtYXApOwpA
QCAtODEsMjQgKzEwMCw0NiBAQCB2b2lkIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjpzZXRBdXRv
U3RhcnRPcmlnaW5zVGFibGUoSW1tdXRhYmxlRGljdGlvbmFyeSYgdGFibAogewogICAgIG1fYXV0
b1N0YXJ0VGFibGUuY2xlYXIoKTsKICAgICBtX2F1dG9TdGFydEhhc2hlcy5jbGVhcigpOwotICAg
IFZlY3Rvcjx1bnNpZ25lZD4gaGFzaFZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3Vi
bGU+IGhhc2hNYXA7CiAKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSB0YWJsZS5tYXAoKS5lbmQoKTsKICAgICBmb3IgKEltbXV0YWJsZURpY3Rp
b25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFibGUubWFwKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGhhc2hlczsKLSAg
ICAgICAgSW1tdXRhYmxlQXJyYXkqIHRhYmxlSGFzaGVzID0gc3RhdGljX2Nhc3Q8SW1tdXRhYmxl
QXJyYXkqPihpdC0+dmFsdWUuZ2V0KCkpOwotICAgICAgICBzaXplX3QgaGFzaFNldFNpemUgPSB0
YWJsZUhhc2hlcy0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hT
ZXRTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odGFibGVIYXNoZXMtPmF0PFdlYlVJbnQ2ND4oaSktPnZhbHVlKCkpOwotICAgICAg
ICAgICAgaGFzaGVzLmFkZChoYXNoKTsKLSAgICAgICAgICAgIG1fYXV0b1N0YXJ0SGFzaGVzLmFk
ZChoYXNoKTsKLSAgICAgICAgICAgIGhhc2hWZWN0b3IuYXBwZW5kKGhhc2gpOworICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+IGhhc2hlczsKKyAgICAgICAgSW1tdXRhYmxlRGljdGlv
bmFyeSogaGFzaGVzRm9yUGFnZSA9IHN0YXRpY19jYXN0PEltbXV0YWJsZURpY3Rpb25hcnkqPihp
dC0+dmFsdWUuZ2V0KCkpOworICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpj
b25zdF9pdGVyYXRvciBoYXNoRW5kID0gaGFzaGVzRm9yUGFnZS0+bWFwKCkuZW5kKCk7CisgICAg
ICAgIGZvciAoSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaGFz
aEl0ID0gaGFzaGVzRm9yUGFnZS0+bWFwKCkuYmVnaW4oKTsgaGFzaEl0ICE9IGhhc2hFbmQ7ICsr
aGFzaEl0KSB7CisgICAgICAgICAgICBib29sIG9rOworICAgICAgICAgICAgdW5zaWduZWQgaGFz
aCA9IGhhc2hJdC0+a2V5LnRvVUludCgmb2spOworICAgICAgICAgICAgaWYgKCFvaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGhhc2hJdC0+dmFsdWUtPnR5
cGUoKSAhPSBXZWJEb3VibGU6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGRvdWJsZSBleHBpcmF0aW9uVGltZSA9IHN0YXRpY19jYXN0PFdlYkRvdWJs
ZSo+KGhhc2hJdC0+dmFsdWUuZ2V0KCkpLT52YWx1ZSgpOworICAgICAgICAgICAgaGFzaGVzLnNl
dChoYXNoLCBleHBpcmF0aW9uVGltZSk7CisgICAgICAgICAgICBoYXNoTWFwLnNldChoYXNoLCBl
eHBpcmF0aW9uVGltZSk7CisgICAgICAgICAgICBtX2F1dG9TdGFydEhhc2hlcy5zZXQoaGFzaCwg
aXQtPmtleSk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2F1dG9TdGFydFRhYmxlLmFkZChpdC0+
a2V5LCBoYXNoZXMpOworICAgICAgICBtX2F1dG9TdGFydFRhYmxlLnNldChpdC0+a2V5LCBoYXNo
ZXMpOwogICAgIH0KIAotICAgIG1fY29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpQbHVnSW5BdXRvU3RhcnRPcmlnaW5zQ2hhbmdlZChoYXNoVmVjdG9yKSk7
CisgICAgbV9jb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhoYXNoTWFwKSk7Cit9CisKK3ZvaWQgUGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXI6OmRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1
Z0luT3JpZ2luSGFzaCkKK3sKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fYXV0b1N0YXJ0SGFzaGVzLmZpbmQocGx1Z0luT3JpZ2luSGFzaCk7Cisg
ICAgaWYgKGl0ID09IG1fYXV0b1N0YXJ0SGFzaGVzLmVuZCgpKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91YmxlIG5ld0V4
cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVGcm9tTm93KCk7CisgICAgbV9hdXRvU3RhcnRU
YWJsZS5maW5kKGl0LT52YWx1ZSktPnZhbHVlLnNldChwbHVnSW5PcmlnaW5IYXNoLCBuZXdFeHBp
cmF0aW9uVGltZSk7CisgICAgbV9jb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OkRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbihwbHVnSW5PcmlnaW5IYXNo
LCBuZXdFeHBpcmF0aW9uVGltZSkpOworICAgIG1fY29udGV4dC0+Y2xpZW50KCkucGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzQ2hhbmdlZChtX2NvbnRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdJbkF1dG9TdGFydFByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5oCmluZGV4IDMyNGUzMjYyNjQ4ZjU1NDE3NGM1MmZl
ZDc4NTQ4NDZkYjcyYTNhMjcuLmUyNDY2MTA0NjZkOWRmY2FhYjI2NDE1MjlkOWM2MmQyZmMwZTFh
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdJbkF1
dG9TdGFydFByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuaApAQCAtNDMsMTYgKzQzLDE3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRkQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5z
aWduZWQgcGx1Z0luT3JpZ2luSGFzaCk7CiAKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGF1dG9TdGFy
dE9yaWdpbnNDb3B5KCkgY29uc3Q7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPiBhdXRv
U3RhcnRPcmlnaW5zQ29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlv
bmFyeT4gYXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSgpIGNvbnN0OwogICAgIHZvaWQgc2V0QXV0
b1N0YXJ0T3JpZ2luc1RhYmxlKEltbXV0YWJsZURpY3Rpb25hcnkmKTsKKyAgICB2b2lkIGRpZFJl
Y2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCk7CiAKIHByaXZh
dGU6CiAgICAgV2ViQ29udGV4dCogbV9jb250ZXh0OwogICAgIAotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIEhhc2hTZXQ8dW5zaWduZWQ+LCBDYXNlRm9sZGluZ0hhc2g+IEF1dG9TdGFydFRh
YmxlOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJs
ZT4sIENhc2VGb2xkaW5nSGFzaD4gQXV0b1N0YXJ0VGFibGU7CiAgICAgQXV0b1N0YXJ0VGFibGUg
bV9hdXRvU3RhcnRUYWJsZTsKLSAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX2F1dG9TdGFydEhhc2hl
czsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBTdHJpbmc+IG1fYXV0b1N0YXJ0SGFzaGVzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4
dC5jcHAKaW5kZXggMWRmNWI4Njc5MTlhZmNmMDJkZTY2ZDdiMjNmMWI1NzQxYTY2MWRkNC4uZWIy
ZWRhMmMzOGY3Njg1ODhmMzZkYmFlMTYwZmYwNTVmYjNkYmY5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmNwcApAQCAtMTE0Myw2ICsxMTQzLDExIEBAIHZvaWQgV2ViQ29u
dGV4dDo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChjb25zdCBTdHJpbmcmIHBhZ2VPcmln
aW4sIHVuc2lnbmVkCiAgICAgbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5hZGRBdXRvU3RhcnRP
cmlnaW4ocGFnZU9yaWdpbiwgcGx1Z0luT3JpZ2luSGFzaCk7CiB9CiAKK3ZvaWQgV2ViQ29udGV4
dDo6cGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbih1bnNpZ25lZCBwbHVnSW5PcmlnaW5I
YXNoKQoreworICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuZGlkUmVjZWl2ZVVzZXJJbnRl
cmFjdGlvbihwbHVnSW5PcmlnaW5IYXNoKTsKK30KKwogUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0
aW9uYXJ5PiBXZWJDb250ZXh0OjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmF1dG9TdGFydE9yaWdpbnNU
YWJsZUNvcHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCmluZGV4IGZmMDIz
ZTVjZmUyNzgyOTNjZWU4MDk3NzQ3NDYyNWJkNzg2ZWNlNGIuLjU1ZWJjYTUxMzAzYjJmZWM3YzYy
OTNmZWY1NDAzYTkzMGU3N2MwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
aApAQCAtMzY2LDYgKzM2Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgYWRkUGx1
Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChjb25zdCBTdHJpbmcmIHBhZ2VPcmlnaW4sIHVuc2lnbmVk
IHBsdWdJbk9yaWdpbkhhc2gpOworICAgIHZvaWQgcGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFj
dGlvbih1bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNoKTsKIAogICAgIENvcmVJUEM6Ok1lc3NhZ2VS
ZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgppbmRleCA4MzljYmNjY2FiNjMyYzMxNDIw
ZTU2MzA1Njg2ZWMyOGEyNDJhMGExLi5mMmVkYjFkNjNlZWRkMmQ1NTlmZmQwOTlkMDEyODdiMDFj
ZjJmNDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNz
YWdlcy5pbgpAQCAtNTQsNCArNTQsNSBAQCBtZXNzYWdlcyAtPiBXZWJDb250ZXh0IHsKIAogICAg
ICMgUGx1Zy1pbiBtZXNzYWdlcy4KICAgICB2b2lkIEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhh
c2goV1RGOjpTdHJpbmcgcGFnZU9yaWdpbiwgdWludDMyX3QgaGFzaCkKKyAgICB2b2lkIFBsdWdJ
bkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odWludDMyX3QgaGFzaCkKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAzNzgyNjli
NzczMzcyMTVkM2QyMzZhMzE3M2I3MTRlODlhMTc0NjZmLi41Zjk2YTJhNTE5YTNlM2E1OGVkZWU3
ZjRkMTFiMmIzNGE0MzZlYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0yNzUsNiArMjc1LDcgQEAgUGx1Z2luVmlldzo6UGx1
Z2luVmlldyhQYXNzUmVmUHRyPEhUTUxQbHVnSW5FbGVtZW50PiBwbHVnaW5FbGVtZW50LCBQYXNz
UmVmUHRyPFAKICAgICAsIG1fbWFudWFsU3RyZWFtU3RhdGUoU3RyZWFtU3RhdGVJbml0aWFsKQog
ICAgICwgbV9wbHVnaW5TbmFwc2hvdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3OjpwbHVnaW5TbmFw
c2hvdFRpbWVyRmlyZWQsIHBsdWdpblNuYXBzaG90VGltZXJEZWxheSkKICAgICAsIG1fY291bnRT
bmFwc2hvdFJldHJpZXMoMCkKKyAgICAsIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbihmYWxz
ZSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiB7CiAgICAgbV93ZWJQYWdlLT5hZGRQbHVn
aW5WaWV3KHRoaXMpOwpAQCAtODEwLDggKzgxMSw2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1v
dXNlTW92ZSkKICAgICAgICAgfHwgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGN1cnJlbnRFdmVudC0+dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24p
CiAgICAgICAgIHx8IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQg
JiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlVXApKSB7Ci0gICAgICAg
IC8vIFdlIGhhdmUgYSBtb3VzZSBldmVudC4KLQogICAgICAgICAvLyBGSVhNRTogQ2xpY2tpbmcg
aW4gYSBzY3JvbGwgYmFyIHNob3VsZCBub3QgY2hhbmdlIGZvY3VzLgogICAgICAgICBpZiAoY3Vy
cmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgewogICAgICAgICAgICAg
Zm9jdXNQbHVnaW5FbGVtZW50KCk7CkBAIC04MjAsMjIgKzgxOSwyMiBAQCB2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIGZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CiAKICAgICAgICAgZGlk
SGFuZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxjb25z
dCBXZWJNb3VzZUV2ZW50Jj4oKmN1cnJlbnRFdmVudCkpOworICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgICAgICBwbHVnaW5E
aWRSZWNlaXZlVXNlckludGVyYWN0aW9uKCk7CiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkg
PT0gV2ViRXZlbnQ6OldoZWVsICYmIG1fcGx1Z2luLT53YW50c1doZWVsRXZlbnRzKCkpIHsKLSAg
ICAgICAgLy8gV2UgaGF2ZSBhIHdoZWVsIGV2ZW50LgogICAgICAgICBkaWRIYW5kbGVFdmVudCA9
IG1fcGx1Z2luLT5oYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PGNvbnN0IFdlYldoZWVsRXZl
bnQmPigqY3VycmVudEV2ZW50KSk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCAmJiBjdXJyZW50RXZlbnQtPnR5cGUoKSA9PSBXZWJF
dmVudDo6TW91c2VNb3ZlKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBtb3VzZSBlbnRlciBldmVu
dC4KKyAgICAgICAgcGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbigpOworICAgIH0gZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgJiYgY3Vy
cmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkKICAgICAgICAgZGlkSGFu
ZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlTW91c2VFbnRlckV2ZW50KHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPigqY3VycmVudEV2ZW50KSk7Ci0gICAgfSBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50ICYmIGN1cnJlbnRFdmVudC0+
dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZU1vdmUpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIG1v
dXNlIGxlYXZlIGV2ZW50LgorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3V0RXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1v
dXNlTW92ZSkKICAgICAgICAgZGlkSGFuZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlTW91c2VM
ZWF2ZUV2ZW50KHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPigqY3VycmVudEV2ZW50
KSk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0
bWVudUV2ZW50ICYmIGN1cnJlbnRFdmVudC0+dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24p
IHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbnRleHQgbWVudSBldmVudC4KKyAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50ICYmIGN1cnJl
bnRFdmVudC0+dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKICAgICAgICAgZGlkSGFu
ZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlQ29udGV4dE1lbnVFdmVudChzdGF0aWNfY2FzdDxj
b25zdCBXZWJNb3VzZUV2ZW50Jj4oKmN1cnJlbnRFdmVudCkpOworICAgICAgICBwbHVnaW5EaWRS
ZWNlaXZlVXNlckludGVyYWN0aW9uKCk7CiAgICAgfSBlbHNlIGlmICgoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGN1cnJlbnRFdmVudC0+dHlwZSgpID09IFdl
YkV2ZW50OjpLZXlEb3duKQogICAgICAgICAgICAgICAgfHwgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXVwRXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6
OktleVVwKSkgewotICAgICAgICAvLyBXZSBoYXZlIGEga2V5Ym9hcmQgZXZlbnQuCiAgICAgICAg
IGRpZEhhbmRsZUV2ZW50ID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCY+KCpjdXJyZW50RXZlbnQpKTsKKyAgICAgICAgcGx1
Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbigpOwogICAgIH0KIAogICAgIGlmIChkaWRIYW5k
bGVFdmVudCkKQEAgLTE2MDgsNCArMTYwNywxMyBAQCBib29sIFBsdWdpblZpZXc6OnNob3VsZEFs
d2F5c0F1dG9TdGFydCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGx1Z2luLT5zaG91bGRBbHdheXNB
dXRvU3RhcnQoKTsKIH0KIAordm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlcklu
dGVyYWN0aW9uKCkKK3sKKyAgICBpZiAobV9kaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwor
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBsdWdJbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24o
bV9wbHVnaW5FbGVtZW50LT5wbHVnSW5PcmlnaW5IYXNoKCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5oCmluZGV4IDQ5NmM4ZjUyNzAxNjE2NmYwYWQzN2IzNzFkNTU3MGQ0MWRmNTYzNTYuLjdlMDdh
N2I0NzM1NDk5OTRkOGYzM2MyZmEyNDYyZWZhOTAwY2RjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMTI4LDYgKzEyOCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWRlbGl2ZXJNYW51YWxTdHJlYW0oKTsKIAogICAgIHZvaWQgcGx1
Z2luU25hcHNob3RUaW1lckZpcmVkKFdlYkNvcmU6OkRlZmVycmFibGVPbmVTaG90VGltZXI8UGx1
Z2luVmlldz4qKTsKKyAgICB2b2lkIHBsdWdpbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24oKTsK
IAogICAgIC8vIFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
MjU3LDYgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyB0aW1lciBpcyB1c2VkIHdoZW4g
cGx1Z2luIHNuYXBzaG90dGluZyBpcyBlbmFibGVkLCB0byBjYXB0dXJlIGEgcGx1Z2luIHBsYWNl
aG9sZGVyLgogICAgIFdlYkNvcmU6OkRlZmVycmFibGVPbmVTaG90VGltZXI8UGx1Z2luVmlldz4g
bV9wbHVnaW5TbmFwc2hvdFRpbWVyOwogICAgIHVuc2lnbmVkIG1fY291bnRTbmFwc2hvdFJldHJp
ZXM7CisgICAgYm9vbCBtX2RpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb247CiAKICAgICBkb3VibGUg
bV9wYWdlU2NhbGVGYWN0b3I7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggN2ZlMTFiNTdlNGM1ODFmZTJiNjY5MzY1NTBhY2ZiNmI0YzI5MjczNC4uYzZk
ZDUyNTI4ZmI0NmUxN2Q4ZTllMjFmMDU1ZmM1YWVhYTk1MTNlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIApAQCAtMTIzLDYgKzEyNCw5IEBACiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKy8vIFRoaXMgc2hvdWxkIGJlIGxlc3MgdGhhbiBw
bHVnSW5BdXRvU3RhcnRFeHBpcmF0aW9uVGltZVRocmVzaG9sZCBpbiBQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlci4KK3N0YXRpYyBjb25zdCBkb3VibGUgcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRp
bWVVcGRhdGVUaHJlc2hvbGQgPSAyOSAqIDI0ICogNjA7CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBXZWJQcm9jZXNzJiBXZWJQcm9jZXNzOjpzaGFyZWQoKQpAQCAtMzIwLDggKzMyNCw3IEBAIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1lCiAjZW5kaWYKICAgICBzZXRUZXJtaW5hdGlvblRpbWVvdXQo
cGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVvdXQpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbihwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFy
dE9yaWdpbnNbaV0pOworICAgIHJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhwYXJhbWV0ZXJz
LnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpOwogfQogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKQEAgLTc5Nyw3ICs4MDAsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpjbGVhclBsdWdpblNpdGVE
YXRhKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwbHVnaW5QYXRocywgY29uc3QgVmUKIAogYm9vbCBX
ZWJQcm9jZXNzOjppc1BsdWdJbkF1dG9TdGFydE9yaWdpbih1bnNpZ25lZCBwbHVnSW5PcmlnaW5I
YXNoKQogewotICAgIHJldHVybiBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuY29udGFpbnMocGx1
Z0luT3JpZ2luSGFzaCk7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuZmluZChwbHVnSW5PcmlnaW5IYXNo
KTsKKyAgICBpZiAoaXQgPT0gbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5zLmVuZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgPCBpdC0+dmFsdWU7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzczo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmlu
ZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCkKQEAgLTgxMCwxNiArODE2
LDMwIEBAIHZvaWQgV2ViUHJvY2Vzczo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0
cmluZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1CiAgICAgY29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKHBhZ2VPcmln
aW4sIHBsdWdJbk9yaWdpbkhhc2gpLCAwKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpkaWRBZGRQ
bHVnSW5BdXRvU3RhcnRPcmlnaW4odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCkKK3ZvaWQgV2Vi
UHJvY2Vzczo6ZGlkQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHVuc2lnbmVkIHBsdWdJbk9yaWdp
bkhhc2gsIGRvdWJsZSBleHBpcmF0aW9uVGltZSkKK3sKKyAgICAvLyBXaGVuIGNhbGxlZCwgc29t
ZSB3ZWIgcHJvY2VzcyAod2hpY2ggYWxzbyBtaWdodCBiZSB0aGlzIG9uZSkgYWRkZWQgdGhlIG9y
aWdpbiBmb3IgYXV0by1zdGFydGluZywKKyAgICAvLyBvciByZWNlaXZlZCB1c2VyIGludGVyYWN0
aW9uLgorICAgIC8vIFNldCB0aGUgYml0IHRvIGF2b2lkIGhhdmluZyByZWR1bmRhbnRseSBjYWxs
IGludG8gdGhlIFVJIHByb2Nlc3MgdXBvbiB1c2VyIGludGVyYWN0aW9uLgorICAgIG1fcGx1Z0lu
QXV0b1N0YXJ0T3JpZ2lucy5zZXQocGx1Z0luT3JpZ2luSGFzaCwgZXhwaXJhdGlvblRpbWUpOwor
fQorCit2b2lkIFdlYlByb2Nlc3M6OnJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhjb25zdCBI
YXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+JiBoYXNoZXMpCiB7Ci0gICAgbV9wbHVnSW5BdXRvU3Rh
cnRPcmlnaW5zLmFkZChwbHVnSW5PcmlnaW5IYXNoKTsKKyAgICBtX3BsdWdJbkF1dG9TdGFydE9y
aWdpbnMuc3dhcChjb25zdF9jYXN0PEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4mPihoYXNoZXMp
KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5zQ2hhbmdlZChj
b25zdCBWZWN0b3I8dW5zaWduZWQ+JiBoYXNoZXMpCit2b2lkIFdlYlByb2Nlc3M6OnBsdWdJbkRp
ZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCkKIHsKLSAg
ICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuY2xlYXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGhhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgZGlkQWRkUGx1Z0luQXV0b1N0YXJ0
T3JpZ2luKGhhc2hlc1tpXSk7CisgICAgaWYgKCFwbHVnSW5PcmlnaW5IYXNoKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+OjppdGVyYXRvciBpdCA9IG1f
cGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy5maW5kKHBsdWdJbk9yaWdpbkhhc2gpOworICAgIEFTU0VS
VChpdCAhPSBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuZW5kKCkpOworICAgIGlmIChpdC0+dmFs
dWUgLSBjdXJyZW50VGltZSgpID4gcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRpbWVVcGRhdGVU
aHJlc2hvbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViQ29udGV4dDo6UGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbihwbHVnSW5P
cmlnaW5IYXNoKSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyb21Db3VudGVkU2V0VG9IYXNoTWFw
KFR5cGVDb3VudFNldCogY291bnRlZFNldCwgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiYgbWFw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcC5v
cmlnIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcC5vcmlnCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgwMjc5MjhjMmEyY2JkZWRmNjNlMzMzMDcwMTAyOTY4ZDc2MmFkYzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwLm9yaWcK
QEAgLTAsMCArMSwxMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCisjaW5jbHVkZSAiSW5q
ZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJTdGF0aXN0aWNzRGF0YS5oIgorI2luY2x1ZGUgIldlYkFwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmgiCisjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgor
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgi
CisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdl
b2xvY2F0aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIldlYk1lZGlh
Q2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5oIgorI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW5j
bHVkZSAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNT
dG9yZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNs
dWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWVtb3J5
U3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dseXBo
UGFnZVRyZWVOb2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2UuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0luaXRpYWxpemVMb2dnaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RP
TVdpbmRvdy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTGFuZ3VhZ2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL01lbW9yeUNhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VD
YWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU3RvcmFnZVRyYWNrZXIuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWwuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKE5FVFdPUktfSU5GTykKKyNp
bmNsdWRlICJXZWJOZXR3b3JrSW5mb01hbmFnZXJNZXNzYWdlcy5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5oIgorI2VuZGlmCisKKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNl
bmRpZgorCisjaWYgIUVOQUJMRShQTFVHSU5fUFJPQ0VTUykKKyNpbmNsdWRlICJOZXRzY2FwZVBs
dWdpbk1vZHVsZS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1VTVE9NX1BST1RPQ09MUykKKyNp
bmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyNpbmNsdWRlICJX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCisjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyLmgiCisjZW5kaWYKKworI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
CisjZW5kaWYKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPQ0VTUykKKyNpbmNsdWRlICJQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgSlND
OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoaXMgc2hvdWxkIGJlIGxlc3MgdGhh
biBwbHVnSW5BdXRvU3RhcnRFeHBpcmF0aW9uVGltZVRocmVzaG9sZCBpbiBQbHVnSW5BdXRvU3Rh
cnRQcm92aWRlci4KK3N0YXRpYyBjb25zdCBkb3VibGUgcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlv
blRpbWVVcGRhdGVUaHJlc2hvbGQgPSAyOSAqIDI0ICogNjA7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJQcm9jZXNzJiBXZWJQcm9jZXNzOjpzaGFyZWQoKQoreworICAgIHN0YXRpYyBXZWJQ
cm9jZXNzJiBwcm9jZXNzID0gKm5ldyBXZWJQcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzOwor
fQorCitXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKKyAgICA6IG1faW5EaWRDbG9zZShmYWxzZSkK
KyAgICAsIG1fc2hvdWxkVHJhY2tWaXNpdGVkTGlua3ModHJ1ZSkKKyAgICAsIG1faGFzU2V0Q2Fj
aGVNb2RlbChmYWxzZSkKKyAgICAsIG1fY2FjaGVNb2RlbChDYWNoZU1vZGVsRG9jdW1lbnRWaWV3
ZXIpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFURk9STShNQUMpCisg
ICAgLCBtX2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydChNQUNIX1BPUlRfTlVMTCkKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAsIG1fY2xlYXJSZXNvdXJjZUNhY2hlc0Rpc3BhdGNo
R3JvdXAoMCkKKyNlbmRpZgorICAgICwgbV9mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKGZhbHNl
KQorI2lmIFBMQVRGT1JNKFFUKQorICAgICwgbV9uZXR3b3JrQWNjZXNzTWFuYWdlcigwKQorI2Vu
ZGlmCisgICAgLCBtX3RleHRDaGVja2VyU3RhdGUoKQorI2lmIEVOQUJMRShCQVRURVJZX1NUQVRV
UykKKyAgICAsIG1fYmF0dGVyeU1hbmFnZXIodGhpcykKKyNlbmRpZgorI2lmIEVOQUJMRShORVRX
T1JLX0lORk8pCisgICAgLCBtX25ldHdvcmtJbmZvTWFuYWdlcih0aGlzKQorI2VuZGlmCisgICAg
LCBtX2ljb25EYXRhYmFzZVByb3h5KG5ldyBXZWJJY29uRGF0YWJhc2VQcm94eSh0aGlzKSkKKyNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgICwgbV91c2VzTmV0d29ya1Byb2Nlc3MoZmFs
c2UpCisgICAgLCBtX3dlYlJlc291cmNlTG9hZFNjaGVkdWxlcihuZXcgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKQorI2VuZGlmCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQorICAgICwgbV9w
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIobmV3IFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlcikKKyNlbmRpZgorI2lmIFVTRShTT1VQKQorICAgICwgbV9zb3VwUmVxdWVzdE1hbmFn
ZXIodGhpcykKKyNlbmRpZgoreworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorICAgIC8v
IEluaXRpYWxpemUgb3VyIHBsYXRmb3JtIHN0cmF0ZWdpZXMuCisgICAgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjppbml0aWFsaXplKCk7CisjZW5kaWYgLy8gVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMp
CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgV2ViQ29yZTo6aW5pdGlhbGl6ZUxvZ2dpbmdDaGFu
bmVsc0lmTmVjZXNzYXJ5KCk7CisgICAgV2ViS2l0Ojppbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5l
Y2Vzc2FyeSgpOworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKKworCisKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgbW92ZWQgdG8gd2hlcmUgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZSBpcyBjYWxs
ZWQsCisgICAgLy8gc28gdGhhdCBwb3J0cyBoYXZlIGEgY2hhbmNlIHRvIGN1c3RvbWl6ZSwgYW5k
IGlmZGVmcyBpbiB0aGlzIGZpbGUgYXJlCisgICAgLy8gbGltaXRlZC4KKyAgICBhZGRTdXBwbGVt
ZW50PFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI+KCk7CisKKyAgICBhZGRTdXBwbGVtZW50PFdl
Ykdlb2xvY2F0aW9uTWFuYWdlcj4oKTsKKyAgICBhZGRTdXBwbGVtZW50PFdlYkFwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyPigpOworICAgIGFkZFN1cHBsZW1lbnQ8V2ViUmVzb3VyY2VDYWNoZU1hbmFn
ZXI+KCk7CisgICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpOworICAgIGFkZFN1
cHBsZW1lbnQ8V2ViTWVkaWFDYWNoZU1hbmFnZXI+KCk7CisgICAgYWRkU3VwcGxlbWVudDxBdXRo
ZW50aWNhdGlvbk1hbmFnZXI+KCk7CisgICAgCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAg
ICBhZGRTdXBwbGVtZW50PFdlYkRhdGFiYXNlTWFuYWdlcj4oKTsKKyNlbmRpZgorI2lmIEVOQUJM
RShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgYWRk
U3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpOworI2VuZGlmCisjaWYgRU5BQkxF
KENVU1RPTV9QUk9UT0NPTFMpCisgICAgYWRkU3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFn
ZXI+KCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplKENvcmVJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIgc2VydmVySWRlbnRpZmllciwgUnVuTG9vcCogcnVuTG9v
cCkKK3sKKyAgICBBU1NFUlQoIW1fY29ubmVjdGlvbik7CisKKyAgICBtX2Nvbm5lY3Rpb24gPSBD
b3JlSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKHNlcnZlcklkZW50aWZp
ZXIsIHRoaXMsIHJ1bkxvb3ApOworICAgIG1fY29ubmVjdGlvbi0+c2V0RGlkQ2xvc2VPbkNvbm5l
Y3Rpb25Xb3JrUXVldWVDYWxsYmFjayhDaGlsZFByb2Nlc3M6OmRpZENsb3NlT25Db25uZWN0aW9u
V29ya1F1ZXVlKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnNldFNob3VsZEV4aXRPblN5bmNNZXNzYWdl
U2VuZEZhaWx1cmUodHJ1ZSk7CisgICAgbV9jb25uZWN0aW9uLT5hZGRRdWV1ZUNsaWVudCgmbV9l
dmVudERpc3BhdGNoZXIpOworICAgIG1fY29ubmVjdGlvbi0+YWRkUXVldWVDbGllbnQodGhpcyk7
CisgICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7CisKKyAgICBtX3dlYkNvbm5lY3Rpb24gPSBXZWJD
b25uZWN0aW9uVG9VSVByb2Nlc3M6OmNyZWF0ZSh0aGlzKTsKKworICAgIG1fcnVuTG9vcCA9IHJ1
bkxvb3A7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6ZGlkQ3JlYXRlRG93bmxvYWQoKQoreworICAg
IGRpc2FibGVUZXJtaW5hdGlvbigpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmRpZERlc3Ryb3lE
b3dubG9hZCgpCit7CisgICAgZW5hYmxlVGVybWluYXRpb24oKTsKK30KKworQ29yZUlQQzo6Q29u
bmVjdGlvbiogV2ViUHJvY2Vzczo6ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKQoreworICAgIHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7Cit9CisKK0F1dGhlbnRpY2F0aW9uTWFuYWdlciYgV2Vi
UHJvY2Vzczo6ZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4g
KnN1cHBsZW1lbnQ8QXV0aGVudGljYXRpb25NYW5hZ2VyPigpOworfQorCit2b2lkIFdlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IEFTU0VSVChtX3BhZ2VNYXAuaXNFbXB0eSgpKTsKKworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MocGFyYW1ldGVycywgZGVjb2Rlcik7CisKKyAgICBtZW1vcnlQcmVzc3VyZUhhbmRs
ZXIoKS5pbnN0YWxsKCk7CisKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiBpbmplY3RlZEJ1bmRsZUlu
aXRpYWxpemF0aW9uVXNlckRhdGE7CisgICAgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZURlY29k
ZXIgbWVzc2FnZURlY29kZXIoaW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9pbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpjcmVhdGUocGFyYW1l
dGVycy5pbmplY3RlZEJ1bmRsZVBhdGgpOworICAgICAgICBtX2luamVjdGVkQnVuZGxlLT5zZXRT
YW5kYm94RXh0ZW5zaW9uKFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShwYXJhbWV0ZXJzLmluamVj
dGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSkpOworCisgICAgICAgIGlmICghbV9pbmplY3Rl
ZEJ1bmRsZS0+bG9hZChpbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEuZ2V0KCkp
KSB7CisgICAgICAgICAgICAvLyBEb24ndCBrZWVwIGFyb3VuZCB0aGUgSW5qZWN0ZWRCdW5kbGUg
cmVmZXJlbmNlIGlmIHRoZSBsb2FkIGZhaWxzLgorICAgICAgICAgICAgbV9pbmplY3RlZEJ1bmRs
ZS5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgV2ViUHJvY2Vzc1N1cHBsZW1lbnRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBwbGVtZW50cy5iZWdpbigpOworICAgIFdlYlBy
b2Nlc3NTdXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N1cHBsZW1lbnRzLmVu
ZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+aW5p
dGlhbGl6ZShwYXJhbWV0ZXJzKTsKKworI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCisgICAgbV9p
Y29uRGF0YWJhc2VQcm94eS0+c2V0RW5hYmxlZChwYXJhbWV0ZXJzLmljb25EYXRhYmFzZUVuYWJs
ZWQpOworI2VuZGlmCisKKyAgICBpZiAoIXBhcmFtZXRlcnMuYXBwbGljYXRpb25DYWNoZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIGNhY2hlU3RvcmFnZSgpLnNldENhY2hlRGlyZWN0b3J5
KHBhcmFtZXRlcnMuYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSk7CisKKyAgICBzZXRTaG91bGRU
cmFja1Zpc2l0ZWRMaW5rcyhwYXJhbWV0ZXJzLnNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKKyAg
ICBzZXRDYWNoZU1vZGVsKHN0YXRpY19jYXN0PHVpbnQzMl90PihwYXJhbWV0ZXJzLmNhY2hlTW9k
ZWwpKTsKKworICAgIGlmICghcGFyYW1ldGVycy5sYW5ndWFnZXMuaXNFbXB0eSgpKQorICAgICAg
ICBvdmVycmlkZVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMocGFyYW1ldGVycy5sYW5ndWFnZXMpOwor
CisgICAgbV90ZXh0Q2hlY2tlclN0YXRlID0gcGFyYW1ldGVycy50ZXh0Q2hlY2tlclN0YXRlOwor
CisgICAgbV9mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkID0gcGFyYW1ldGVycy5mdWxsS2V5Ym9h
cmRBY2Nlc3NFbmFibGVkOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVyZEFzRW1wdHlEb2N1bWVudC5zaXplKCk7ICsraSkKKyAgICAg
ICAgcmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQocGFyYW1ldGVycy51cmxTY2hlbWVz
UmVnaXN0ZXJlcmRBc0VtcHR5RG9jdW1lbnRbaV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUocGFyYW1ldGVycy51cmxTY2hlbWVz
UmVnaXN0ZXJlZEFzU2VjdXJlW2ldKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy51cmxTY2hlbWVzRm9yV2hpY2hEb21haW5SZWxheGF0aW9uSXNGb3JiaWRkZW4uc2l6
ZSgpOyArK2kpCisgICAgICAgIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hl
bWUocGFyYW1ldGVycy51cmxTY2hlbWVzRm9yV2hpY2hEb21haW5SZWxheGF0aW9uSXNGb3JiaWRk
ZW5baV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNMb2NhbC5zaXplKCk7ICsraSkKKyAgICAgICAgcmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsW2ldKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlZ2lzdGVyVVJMU2NoZW1lQXNOb0Fj
Y2VzcyhwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vzc1tpXSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0Rpc3BsYXlJc29sYXRlZC5zaXplKCk7ICsraSkKKyAgICAgICAgcmVnaXN0ZXJVUkxTY2hlbWVB
c0Rpc3BsYXlJc29sYXRlZChwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5
SXNvbGF0ZWRbaV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JTRW5hYmxlZC5zaXplKCk7ICsraSkKKyAgICAgICAgcmVn
aXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVkKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0NPUlNFbmFibGVkW2ldKTsKKworICAgIHNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVy
dmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwpOworCisgICAgaWYg
KHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkKKyAgICAgICAg
c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgodHJ1ZSk7CisKKyAgICBpZiAocGFyYW1l
dGVycy5zaG91bGRVc2VGb250U21vb3RoaW5nKQorICAgICAgICBzZXRTaG91bGRVc2VGb250U21v
b3RoaW5nKHRydWUpOworCisjaWYgKFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykpICYm
ICFQTEFURk9STShXSU4pCisgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0UHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShwYXJhbWV0ZXJzLnVpUHJvY2Vz
c0J1bmRsZUlkZW50aWZpZXIpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorICAgIG1fdXNlc05ldHdvcmtQcm9jZXNzID0gcGFyYW1ldGVycy51c2VzTmV0d29ya1Byb2Nl
c3M7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CisjZW5kaWYKKyAgICBz
ZXRUZXJtaW5hdGlvblRpbWVvdXQocGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVvdXQpOworCis8
PDw8PDw8IFVwZGF0ZWQgdXBzdHJlYW0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFt
ZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy5zaXplKCk7ICsraSkKKyAgICAgICAgZGlkQWRk
UGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHBhcmFtZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2luc1tp
XSk7Cis9PT09PT09CisgICAgcmVzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKHBhcmFtZXRlcnMu
cGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyk7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX1BST1RPQ09MUykK
KyAgICBpbml0aWFsaXplQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHBhcmFtZXRlcnMpOworI2VuZGlm
Cis+Pj4+Pj4+IFN0YXNoZWQgY2hhbmdlcworfQorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKK3ZvaWQgV2ViUHJvY2Vzczo6ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkKK3sK
KyAgICBpZiAoIW1fdXNlc05ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIENv
cmVJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyOworCisgICAgaWYg
KCFjb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLAorICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OlJlcGx5KGVuY29kZWRDb25uZWN0aW9u
SWRlbnRpZmllciksIDApKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihl
bmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsKKyAgICBpZiAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6aWRlbnRpZmllcklzTnVsbChjb25uZWN0aW9uSWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybjsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICBt
X25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6Y3Jl
YXRlKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQorCit2b2lkIFdlYlByb2Nlc3M6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKGJv
b2wgc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCit7CisgICAgbV9zaG91bGRUcmFja1Zpc2l0ZWRM
aW5rcyA9IHNob3VsZFRyYWNrVmlzaXRlZExpbmtzOworICAgIFBhZ2VHcm91cDo6c2V0U2hvdWxk
VHJhY2tWaXNpdGVkTGlua3Moc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpOworfQorCit2b2lkIFdl
YlByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQoreworICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzRW1w
dHlEb2N1bWVudCh1cmxTY2hlbWUpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpIGNvbnN0Cit7CisgICAgU2No
ZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKK30KKwor
dm9pZCBXZWJQcm9jZXNzOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKSBjb25zdAoreworICAgIFNjaGVtZVJlZ2lzdHJ5Ojpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKHRydWUsIHVybFNjaGVtZSk7
Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0
cmluZyYgdXJsU2NoZW1lKSBjb25zdAoreworICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpyZWdpc3Rl
clVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpIGNvbnN0Cit7Cisg
ICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUp
OworfQorCit2b2lkIFdlYlByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0
ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpIGNvbnN0Cit7CisgICAgU2NoZW1lUmVnaXN0cnk6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQodXJsU2NoZW1lKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpIGNvbnN0Cit7CisgICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNDT1JTRW5hYmxlZCh1cmxTY2hlbWUpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnNldERl
ZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCit7Cisg
ICAgUmVzb3VyY2VSZXF1ZXN0OjpzZXREZWZhdWx0VGltZW91dEludGVydmFsKHRpbWVvdXRJbnRl
cnZhbCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29k
ZVBhdGgoYm9vbCBhbHdheXNVc2VDb21wbGV4VGV4dCkKK3sKKyAgICBXZWJDb3JlOjpGb250Ojpz
ZXRDb2RlUGF0aChhbHdheXNVc2VDb21wbGV4VGV4dCA/IFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXgg
OiBXZWJDb3JlOjpGb250OjpBdXRvKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpzZXRTaG91bGRV
c2VGb250U21vb3RoaW5nKGJvb2wgdXNlRm9udFNtb290aGluZykKK3sKKyAgICBXZWJDb3JlOjpG
b250OjpzZXRTaG91bGRVc2VTbW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7Cit9CisKK3ZvaWQg
V2ViUHJvY2Vzczo6dXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGxhbmd1YWdlcykgY29uc3QKK3sKKyAgICBvdmVycmlkZVVzZXJQcmVmZXJyZWRMYW5n
dWFnZXMobGFuZ3VhZ2VzKTsKKyAgICBsYW5ndWFnZURpZENoYW5nZSgpOworfQorCit2b2lkIFdl
YlByb2Nlc3M6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJk
QWNjZXNzRW5hYmxlZCkKK3sKKyAgICBtX2Z1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQgPSBmdWxs
S2V5Ym9hcmRBY2Nlc3NFbmFibGVkOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmVuc3VyZVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oKQoreworI2lmIChQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdP
UkspKSAmJiAhUExBVEZPUk0oV0lOKQorICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlByb2Nl
c3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKK3sKKyNpZiAoUExBVEZPUk0oTUFD
KSB8fCBVU0UoQ0ZORVRXT1JLKSkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOworI2VuZGlmCit9
CisKK0Rvd25sb2FkTWFuYWdlciYgV2ViUHJvY2Vzczo6ZG93bmxvYWRNYW5hZ2VyKCkKK3sKKyNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIEFTU0VSVCghbV91c2VzTmV0d29ya1Byb2Nl
c3MpOworI2VuZGlmCisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERvd25sb2FkTWFuYWdlciwg
ZG93bmxvYWRNYW5hZ2VyLCAodGhpcykpOworICAgIHJldHVybiBkb3dubG9hZE1hbmFnZXI7Cit9
CisKKyNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1MpCitQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXImIFdlYlByb2Nlc3M6OnBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpCit7Cisg
ICAgcmV0dXJuICptX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjsKK30KKyNlbmRpZgor
Cit2b2lkIFdlYlByb2Nlc3M6OnNldFZpc2l0ZWRMaW5rVGFibGUoY29uc3QgU2hhcmVkTWVtb3J5
OjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1v
cnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkp
OworICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zpc2l0
ZWRMaW5rVGFibGUuc2V0U2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeS5yZWxlYXNlKCkpOworfQor
Cit2b2lkIFdlYlByb2Nlc3M6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpMaW5rSGFzaD4mIGxpbmtIYXNoZXMpCit7CisgICAgLy8gRklYTUU6IFdlIG1heSB3
YW50IHRvIHRyYWNrIHZpc2l0ZWQgbGlua3MgcGVyIFdlYlBhZ2VHcm91cCByYXRoZXIgdGhhbiBw
ZXIgV2ViQ29udGV4dC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmtIYXNoZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91
cFByb3h5PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZUdyb3VwTWFwLmJlZ2luKCk7Cisg
ICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlR3JvdXBNYXAuZW5kKCk7CisgICAgICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBQYWdlOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKFBh
Z2VHcm91cDo6cGFnZUdyb3VwKGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSwgbGlua0hhc2hlc1tp
XSk7CisgICAgfQorCisgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHls
ZVJlY2FsYygpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmFsbFZpc2l0ZWRMaW5rU3RhdGVDaGFu
Z2VkKCkKK3sKKyAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gdHJhY2sgdmlzaXRlZCBsaW5r
cyBwZXIgV2ViUGFnZUdyb3VwIHJhdGhlciB0aGFuIHBlciBXZWJDb250ZXh0LgorICAgIEhhc2hN
YXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BhZ2VHcm91cE1hcC5iZWdpbigpOworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0
cjxXZWJQYWdlR3JvdXBQcm94eT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlR3JvdXBN
YXAuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgUGFnZTo6YWxs
VmlzaXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXA6OnBhZ2VHcm91cChpdC0+dmFsdWUtPmlkZW50
aWZpZXIoKSkpOworCisgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHls
ZVJlY2FsYygpOworfQorCitib29sIFdlYlByb2Nlc3M6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2gg
bGlua0hhc2gpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlzaXRlZExpbmtUYWJsZS5pc0xpbmtW
aXNpdGVkKGxpbmtIYXNoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjphZGRWaXNpdGVkTGluayhX
ZWJDb3JlOjpMaW5rSGFzaCBsaW5rSGFzaCkKK3sKKyAgICBpZiAoaXNMaW5rVmlzaXRlZChsaW5r
SGFzaCkgfHwgIW1fc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCisgICAgICAgIHJldHVybjsKKyAg
ICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNvbnRleHQ6OkFkZFZpc2l0ZWRMaW5r
SGFzaChsaW5rSGFzaCksIDApOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnNldENhY2hlTW9kZWwo
dWludDMyX3QgY20pCit7CisgICAgQ2FjaGVNb2RlbCBjYWNoZU1vZGVsID0gc3RhdGljX2Nhc3Q8
Q2FjaGVNb2RlbD4oY20pOworCisgICAgaWYgKCFtX2hhc1NldENhY2hlTW9kZWwgfHwgY2FjaGVN
b2RlbCAhPSBtX2NhY2hlTW9kZWwpIHsKKyAgICAgICAgbV9oYXNTZXRDYWNoZU1vZGVsID0gdHJ1
ZTsKKyAgICAgICAgbV9jYWNoZU1vZGVsID0gY2FjaGVNb2RlbDsKKyAgICAgICAgcGxhdGZvcm1T
ZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpOworICAgIH0KK30KKworV2ViUGFnZSogV2ViUHJvY2Vz
czo6Zm9jdXNlZFdlYlBhZ2UoKSBjb25zdAoreyAgICAKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8V2ViUGFnZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlTWFwLmVuZCgpOwor
ICAgIGZvciAoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2U+ID46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wYWdlTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBX
ZWJQYWdlKiBwYWdlID0gKCppdCkudmFsdWUuZ2V0KCk7CisgICAgICAgIGlmIChwYWdlLT53aW5k
b3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAg
fQorICAgIHJldHVybiAwOworfQorICAgIAorV2ViUGFnZSogV2ViUHJvY2Vzczo6d2ViUGFnZSh1
aW50NjRfdCBwYWdlSUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZU1hcC5nZXQocGFnZUlE
KS5nZXQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpjcmVhdGVXZWJQYWdlKHVpbnQ2NF90IHBh
Z2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAg
ICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgZm9yIHBhZ2UgZXhpc3RlbmNlIGhlcmUgc2lu
Y2UgZHVyaW5nIGEgd2luZG93Lm9wZW4oKSAob3IgdGFyZ2V0ZWQKKyAgICAvLyBsaW5rKSB0aGUg
V2ViUGFnZSBnZXRzIGNyZWF0ZWQgYm90aCBpbiB0aGUgc3luY2hyb25vdXMgaGFuZGxlciBhbmQg
dGhyb3VnaCB0aGUgbm9ybWFsIHdheS4gCisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdl
YlBhZ2U+ID46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BhZ2VNYXAuYWRkKHBhZ2VJRCwgMCk7Cisg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJQYWdlOjpj
cmVhdGUocGFnZUlELCBwYXJhbWV0ZXJzKTsKKworICAgICAgICAvLyBCYWxhbmNlZCBieSBhbiBl
bmFibGVUZXJtaW5hdGlvbiBpbiByZW1vdmVXZWJQYWdlLgorICAgICAgICBkaXNhYmxlVGVybWlu
YXRpb24oKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Cit9
CisKK3ZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCit7Cisg
ICAgQVNTRVJUKG1fcGFnZU1hcC5jb250YWlucyhwYWdlSUQpKTsKKworICAgIG1fcGFnZU1hcC5y
ZW1vdmUocGFnZUlEKTsKKworICAgIGVuYWJsZVRlcm1pbmF0aW9uKCk7Cit9CisKK2Jvb2wgV2Vi
UHJvY2Vzczo6aXNTZXBhcmF0ZVByb2Nlc3MoKSBjb25zdAoreworICAgIC8vIElmIHdlJ3JlIHJ1
bm5pbmcgb24gdGhlIG1haW4gcnVuIGxvb3AsIHdlIGFzc3VtZSB0aGF0IHdlJ3JlIGluIGEgc2Vw
YXJhdGUgcHJvY2Vzcy4KKyAgICByZXR1cm4gbV9ydW5Mb29wID09IFJ1bkxvb3A6Om1haW4oKTsK
K30KKyAKK2Jvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVGVybWluYXRlKCkKK3sKKyAgICAvLyBLZWVw
IHJ1bm5pbmcgZm9yZXZlciBpZiB3ZSdyZSBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MuCisg
ICAgaWYgKCFpc1NlcGFyYXRlUHJvY2VzcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBBU1NFUlQobV9wYWdlTWFwLmlzRW1wdHkoKSk7CisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQorICAgIEFTU0VSVChtX3VzZXNOZXR3b3JrUHJvY2VzcyB8fCAhZG93bmxvYWRNYW5hZ2Vy
KCkuaXNEb3dubG9hZGluZygpKTsKKyNlbHNlCisgICAgQVNTRVJUKCFkb3dubG9hZE1hbmFnZXIo
KS5pc0Rvd25sb2FkaW5nKCkpOworI2VuZGlmCisKKyAgICAvLyBGSVhNRTogdGhlIFNob3VsZFRl
cm1pbmF0ZSBtZXNzYWdlIHNob3VsZCBhbHNvIHNlbmQgdGVybWluYXRpb24gcGFyYW1ldGVycywg
c3VjaCBhcyBhbnkgc2Vzc2lvbiBjb29raWVzIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuCisg
ICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBmYWxzZTsKKyAgICBpZiAoY29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTaG91bGRUZXJtaW5hdGUoKSwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U2hvdWxkVGVybWluYXRlOjpSZXBseShzaG91bGRUZXJt
aW5hdGUpLCAwKQorICAgICAgICAmJiAhc2hvdWxkVGVybWluYXRlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjp0ZXJtaW5h
dGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVj
dE5vdygpOworICAgIG1lbW9yeUNhY2hlKCktPnNldERpc2FibGVkKHRydWUpOworI2VuZGlmCisK
KyAgICAvLyBJbnZhbGlkYXRlIG91ciBjb25uZWN0aW9uLgorICAgIG1fY29ubmVjdGlvbi0+aW52
YWxpZGF0ZSgpOworICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7CisKKyAgICBtX3dlYkNvbm5l
Y3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICBtX3dlYkNvbm5lY3Rpb24gPSBudWxscHRyOworCisg
ICAgcGxhdGZvcm1UZXJtaW5hdGUoKTsKKyAgICBtX3J1bkxvb3AtPnN0b3AoKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2Fn
ZURlY29kZXImIGRlY29kZXIsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5
RW5jb2RlcikKK3sKKyAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5kaXNwYXRjaFN5bmNNZXNzYWdl
KGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBpZiAobV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2RlcikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViUHJvY2Vzcz4o
KSkgeworICAgICAgICBkaWRSZWNlaXZlV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBkZWNvZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtZXNz
YWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViUGFnZUdyb3VwUHJveHk+KCkpIHsKKyAg
ICAgICAgdWludDY0X3QgcGFnZUdyb3VwSUQgPSBkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKTsKKyAg
ICAgICAgaWYgKCFwYWdlR3JvdXBJRCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXBQcm94eSA9IHdlYlBhZ2VHcm91cChw
YWdlR3JvdXBJRCk7CisgICAgICAgIGlmICghcGFnZUdyb3VwUHJveHkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBwYWdlR3JvdXBQcm94eS0+ZGlkUmVjZWl2ZU1lc3Nh
Z2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgV2Vi
UHJvY2Vzczo6ZGlkQ2xvc2UoQ29yZUlQQzo6Q29ubmVjdGlvbiopCit7CisgICAgLy8gV2hlbiBy
dW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MgdGhlIGNvbm5lY3Rpb24gd2lsbCBuZXZlciBiZSBj
bG9zZWQuCisgICAgQVNTRVJUKGlzU2VwYXJhdGVQcm9jZXNzKCkpOworCisjaWZuZGVmIE5ERUJV
RworICAgIG1faW5EaWRDbG9zZSA9IHRydWU7CisKKyAgICAvLyBDbG9zZSBhbGwgdGhlIGxpdmUg
cGFnZXMuCisgICAgVmVjdG9yPFJlZlB0cjxXZWJQYWdlPiA+IHBhZ2VzOworICAgIGNvcHlWYWx1
ZXNUb1ZlY3RvcihtX3BhZ2VNYXAsIHBhZ2VzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhZ2VzLnNpemUoKTsgKytpKQorICAgICAgICBwYWdlc1tpXS0+Y2xvc2UoKTsKKyAgICBwYWdl
cy5jbGVhcigpOworCisgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7Cisg
ICAgbWVtb3J5Q2FjaGUoKS0+c2V0RGlzYWJsZWQodHJ1ZSk7CisjZW5kaWYgICAgCisKKyAgICAv
LyBUaGUgVUkgcHJvY2VzcyBjbG9zZWQgdGhpcyBjb25uZWN0aW9uLCBzaHV0IGRvd24uCisgICAg
bV9ydW5Mb29wLT5zdG9wKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpTdHJpbmdSZWZlcmVuY2Us
IENvcmVJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKKyAgICAvLyBXZSByZWNlaXZlZCBhbiBpbnZh
bGlkIG1lc3NhZ2UsIGJ1dCBzaW5jZSB0aGlzIGlzIGZyb20gdGhlIFVJIHByb2Nlc3MgKHdoaWNo
IHdlIHRydXN0KSwKKyAgICAvLyB3ZSdsbCBsZXQgaXQgc2xpZGUuCit9CisKK3ZvaWQgV2ViUHJv
Y2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2VPbkNvbm5lY3Rpb25Xb3JrUXVldWUoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIGJvb2wmIGRpZEhhbmRsZU1lc3NhZ2UpCit7Cisg
ICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJQcm9jZXNzPigpKSB7
CisgICAgICAgIGRpZFJlY2VpdmVXZWJQcm9jZXNzTWVzc2FnZU9uQ29ubmVjdGlvbldvcmtRdWV1
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIsIGRpZEhhbmRsZU1lc3NhZ2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitXZWJGcmFtZSogV2ViUHJvY2Vzczo6d2ViRnJhbWUo
dWludDY0X3QgZnJhbWVJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZU1hcC5nZXQoZnJh
bWVJRCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6YWRkV2ViRnJhbWUodWludDY0X3QgZnJhbWVJ
RCwgV2ViRnJhbWUqIGZyYW1lKQoreworICAgIG1fZnJhbWVNYXAuc2V0KGZyYW1lSUQsIGZyYW1l
KTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpyZW1vdmVXZWJGcmFtZSh1aW50NjRfdCBmcmFtZUlE
KQoreworICAgIG1fZnJhbWVNYXAucmVtb3ZlKGZyYW1lSUQpOworCisgICAgLy8gV2UgY2FuIGVu
ZCB1cCBoZXJlIGFmdGVyIG91ciBjb25uZWN0aW9uIGhhcyBjbG9zZWQgd2hlbiBXZWJDb3JlJ3Mg
ZnJhbWUgbGlmZS1zdXBwb3J0IHRpbWVyCisgICAgLy8gZmlyZXMgd2hlbiB0aGUgYXBwbGljYXRp
b24gaXMgc2h1dHRpbmcgZG93bi4gVGhlcmUncyBubyBuZWVkIChhbmQgbm8gd2F5KSB0byB1cGRh
dGUgdGhlIFVJCisgICAgLy8gcHJvY2VzcyBpbiB0aGlzIGNhc2UuCisgICAgaWYgKCFtX2Nvbm5l
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViUHJvY2Vzc1Byb3h5OjpEaWREZXN0cm95RnJhbWUoZnJhbWVJRCksIDApOworfQorCitX
ZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKHVpbnQ2NF90IHBhZ2VH
cm91cElEKQoreworICAgIHJldHVybiBtX3BhZ2VHcm91cE1hcC5nZXQocGFnZUdyb3VwSUQpLmdl
dCgpOworfQorCitXZWJQYWdlR3JvdXBQcm94eSogV2ViUHJvY2Vzczo6d2ViUGFnZUdyb3VwKGNv
bnN0IFdlYlBhZ2VHcm91cERhdGEmIHBhZ2VHcm91cERhdGEpCit7CisgICAgSGFzaE1hcDx1aW50
NjRfdCwgUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9w
YWdlR3JvdXBNYXAuYWRkKHBhZ2VHcm91cERhdGEucGFnZUdyb3VwSUQsIDApOworICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViUGFnZUdyb3VwUHJveHk6
OmNyZWF0ZShwYWdlR3JvdXBEYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKK30KKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKK3VpbnQ2NF90
IFdlYlByb2Nlc3M6OmFkZE1lc3NhZ2VQb3J0Q2hhbm5lbChQYXNzUmVmUHRyPFBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsPiBtZXNzYWdlUG9ydENoYW5uZWwpCit7CisgICAgc3RhdGljIHVpbnQ2
NF90IGNoYW5uZWxJRCA9IDA7CisgICAgbV9tZXNzYWdlUG9ydENoYW5uZWxzLmFkZCgrK2NoYW5u
ZWxJRCwgbWVzc2FnZVBvcnRDaGFubmVsKTsKKworICAgIHJldHVybiBjaGFubmVsSUQ7Cit9CisK
K1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsKiBXZWJQcm9jZXNzOjptZXNzYWdlUG9ydENoYW5u
ZWwodWludDY0X3QgY2hhbm5lbElEKQoreworICAgIHJldHVybiBtX21lc3NhZ2VQb3J0Q2hhbm5l
bHMuZ2V0KGNoYW5uZWxJRCkuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlTWVz
c2FnZVBvcnRDaGFubmVsKHVpbnQ2NF90IGNoYW5uZWxJRCkKK3sKKyAgICBtX21lc3NhZ2VQb3J0
Q2hhbm5lbHMucmVtb3ZlKGNoYW5uZWxJRCk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJQcm9jZXNz
OjpjbGVhclJlc291cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciByZXNvdXJjZUNhY2hl
c1RvQ2xlYXIpCit7CisgICAgcGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKHJlc291cmNlQ2Fj
aGVzVG9DbGVhcik7CisKKyAgICAvLyBUb2dnbGluZyB0aGUgY2FjaGUgbW9kZWwgbGlrZSB0aGlz
IGZvcmNlcyB0aGUgY2FjaGUgdG8gZXZpY3QgYWxsIGl0cyBpbi1tZW1vcnkgcmVzb3VyY2VzLgor
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLgorICAgIENhY2hl
TW9kZWwgY2FjaGVNb2RlbCA9IG1fY2FjaGVNb2RlbDsKKyAgICBzZXRDYWNoZU1vZGVsKENhY2hl
TW9kZWxEb2N1bWVudFZpZXdlcik7CisgICAgc2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKTsKKwor
ICAgIG1lbW9yeUNhY2hlKCktPmV2aWN0UmVzb3VyY2VzKCk7CisKKyAgICAvLyBFbXB0eSB0aGUg
Y3Jvc3Mtb3JpZ2luIHByZWZsaWdodCBjYWNoZS4KKyAgICBDcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlOjpzaGFyZWQoKS5lbXB0eSgpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmNsZWFy
QXBwbGljYXRpb25DYWNoZSgpCit7CisgICAgLy8gRW1wdHkgdGhlIGFwcGxpY2F0aW9uIGNhY2hl
LgorICAgIGNhY2hlU3RvcmFnZSgpLmVtcHR5KCk7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkgJiYgIUVOQUJMRShQTFVHSU5fUFJPQ0VTUykKK3ZvaWQgV2ViUHJvY2Vzczo6
Z2V0U2l0ZXNXaXRoUGx1Z2luRGF0YShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGx1Z2luUGF0aHMs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgTG9jYWxUZXJtaW5hdGlvbkRpc2FibGVyIHRl
cm1pbmF0aW9uRGlzYWJsZXIoKnRoaXMpOworCisgICAgSGFzaFNldDxTdHJpbmc+IHNpdGVzU2V0
OworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwbHVnaW5QYXRocy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8TmV0c2Nh
cGVQbHVnaW5Nb2R1bGU+IG5ldHNjYXBlUGx1Z2luTW9kdWxlID0gTmV0c2NhcGVQbHVnaW5Nb2R1
bGU6OmdldE9yQ3JlYXRlKHBsdWdpblBhdGhzW2ldKTsKKyAgICAgICAgaWYgKCFuZXRzY2FwZVBs
dWdpbk1vZHVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFZlY3RvcjxTdHJp
bmc+IHNpdGVzID0gbmV0c2NhcGVQbHVnaW5Nb2R1bGUtPnNpdGVzV2l0aERhdGEoKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXRlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IHNpdGVzU2V0LmFkZChzaXRlc1tpXSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cGx1Z2luUGF0aHMpOworI2VuZGlmCisKKyAgICBWZWN0b3I8U3RyaW5nPiBzaXRlczsKKyAgICBj
b3B5VG9WZWN0b3Ioc2l0ZXNTZXQsIHNpdGVzKTsKKworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpEaWRHZXRTaXRlc1dpdGhQbHVnaW5EYXRhKHNpdGVz
LCBjYWxsYmFja0lEKSwgMCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJQbHVnaW5TaXRl
RGF0YShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGx1Z2luUGF0aHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBzaXRlcywgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZUluU2Vjb25kcywgdWlu
dDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWlu
YXRpb25EaXNhYmxlcigqdGhpcyk7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdpblBhdGhzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbk1vZHVsZT4gbmV0c2NhcGVQbHVnaW5Nb2R1bGUg
PSBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0T3JDcmVhdGUocGx1Z2luUGF0aHNbaV0pOworICAg
ICAgICBpZiAoIW5ldHNjYXBlUGx1Z2luTW9kdWxlKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKHNpdGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gQ2xlYXIgZXZl
cnl0aGluZy4KKyAgICAgICAgICAgIG5ldHNjYXBlUGx1Z2luTW9kdWxlLT5jbGVhclNpdGVEYXRh
KFN0cmluZygpLCBmbGFncywgbWF4QWdlSW5TZWNvbmRzKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXRlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG5ldHNjYXBlUGx1Z2luTW9kdWxlLT5jbGVhclNpdGVEYXRh
KHNpdGVzW2ldLCBmbGFncywgbWF4QWdlSW5TZWNvbmRzKTsKKyAgICB9CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShwbHVnaW5QYXRocyk7CisgICAgVU5VU0VEX1BBUkFNKHNpdGVzKTsKKyAgICBV
TlVTRURfUEFSQU0oZmxhZ3MpOworICAgIFVOVVNFRF9QQVJBTShtYXhBZ2VJblNlY29uZHMpOwor
I2VuZGlmCisKKyAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6RGlkQ2xlYXJQbHVnaW5TaXRlRGF0YShjYWxsYmFja0lEKSwgMCk7Cit9CisjZW5kaWYKKwor
Ym9vbCBXZWJQcm9jZXNzOjppc1BsdWdJbkF1dG9TdGFydE9yaWdpbih1bnNpZ25lZCBwbHVnSW5P
cmlnaW5IYXNoKQoreworICAgIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5zLmZpbmQocGx1Z0luT3JpZ2luSGFzaCk7
CisgICAgaWYgKGl0ID09IG1fcGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjdXJyZW50VGltZSgpIDwgaXQtPnZhbHVlOworfQor
Cit2b2lkIFdlYlByb2Nlc3M6OmFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbihjb25zdCBTdHJpbmcm
IHBhZ2VPcmlnaW4sIHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gpCit7CisgICAgaWYgKGlzUGx1
Z0luQXV0b1N0YXJ0T3JpZ2luKHBsdWdJbk9yaWdpbkhhc2gpKSB7CisgICAgICAgIExPRyhQbHVn
aW5zLCAiSGFzaCAleCBhbHJlYWR5IGV4aXN0cyBhcyBhdXRvLXN0YXJ0IG9yaWdpbiAocmVxdWVz
dCBmb3IgJXMpIiwgcGx1Z0luT3JpZ2luSGFzaCwgcGFnZU9yaWdpbi51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViQ29udGV4dDo6QWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChwYWdlT3JpZ2luLCBw
bHVnSW5PcmlnaW5IYXNoKSwgMCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6ZGlkQWRkUGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luKHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gsIGRvdWJsZSBleHBpcmF0
aW9uVGltZSkKK3sKKyAgICAvLyBXaGVuIGNhbGxlZCwgc29tZSB3ZWIgcHJvY2VzcyAod2hpY2gg
YWxzbyBtaWdodCBiZSB0aGlzIG9uZSkgYWRkZWQgdGhlIG9yaWdpbiBmb3IgYXV0by1zdGFydGlu
ZywKKyAgICAvLyBvciByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uLgorICAgIC8vIFNldCB0aGUg
Yml0IHRvIGF2b2lkIGhhdmluZyByZWR1bmRhbnRseSBjYWxsIGludG8gdGhlIFVJIHByb2Nlc3Mg
dXBvbiB1c2VyIGludGVyYWN0aW9uLgorICAgIG1fcGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy5zZXQo
cGx1Z0luT3JpZ2luSGFzaCwgZXhwaXJhdGlvblRpbWUpOworfQorCit2b2lkIFdlYlByb2Nlc3M6
OnJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhjb25zdCBIYXNoTWFwPHVuc2lnbmVkLCBkb3Vi
bGU+JiBoYXNoZXMpCit7CisgICAgbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5zLnN3YXAoY29uc3Rf
Y2FzdDxIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+Jj4oaGFzaGVzKSk7Cit9CisKK3ZvaWQgV2Vi
UHJvY2Vzczo6cGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbih1bnNpZ25lZCBwbHVnSW5P
cmlnaW5IYXNoKQoreworICAgIGlmICghcGx1Z0luT3JpZ2luSGFzaCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPjo6aXRlcmF0b3IgaXQgPSBtX3BsdWdJ
bkF1dG9TdGFydE9yaWdpbnMuZmluZChwbHVnSW5PcmlnaW5IYXNoKTsKKyAgICBBU1NFUlQoaXQg
IT0gbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5zLmVuZCgpKTsKKyAgICBpZiAoaXQtPnZhbHVlIC0g
Y3VycmVudFRpbWUoKSA+IHBsdWdJbkF1dG9TdGFydEV4cGlyYXRpb25UaW1lVXBkYXRlVGhyZXNo
b2xkKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coUGx1Z2lucywgIkRJRCByZWNlaXZlIHVz
ZXIgaW50ZXJhY3Rpb24gZm9yICVkIGFuZCB0aW1lIGRpZmZlcmVuY2UgaXMgJWYiLCBwbHVnSW5P
cmlnaW5IYXNoLCBpdC0+dmFsdWUgLSBjdXJyZW50VGltZSgpKTsKKyAgICBjb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkNvbnRleHQ6OlBsdWdJbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rp
b24ocGx1Z0luT3JpZ2luSGFzaCksIDApOworfQorCitzdGF0aWMgdm9pZCBmcm9tQ291bnRlZFNl
dFRvSGFzaE1hcChUeXBlQ291bnRTZXQqIGNvdW50ZWRTZXQsIEhhc2hNYXA8U3RyaW5nLCB1aW50
NjRfdD4mIG1hcCkKK3sKKyAgICBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNv
dW50ZWRTZXQtPmVuZCgpOworICAgIGZvciAoVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGNvdW50ZWRTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbWFwLnNl
dChpdC0+a2V5LCBpdC0+dmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBnZXRXZWJDb3JlTWVtb3J5
Q2FjaGVTdGF0aXN0aWNzKFZlY3RvcjxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+ID4mIHJlc3Vs
dCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaW1hZ2VzU3RyaW5nLCAoQVND
SUlMaXRlcmFsKCJJbWFnZXMiKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBj
c3NTdHJpbmcsIChBU0NJSUxpdGVyYWwoIkNTUyIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIHhzbFN0cmluZywgKEFTQ0lJTGl0ZXJhbCgiWFNMIikpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgamF2YVNjcmlwdFN0cmluZywgKEFTQ0lJTGl0ZXJhbCgiSmF2
YVNjcmlwdCIpKSk7CisgICAgCisgICAgTWVtb3J5Q2FjaGU6OlN0YXRpc3RpY3MgbWVtb3J5Q2Fj
aGVTdGF0aXN0aWNzID0gbWVtb3J5Q2FjaGUoKS0+Z2V0U3RhdGlzdGljcygpOworICAgIAorICAg
IEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4gY291bnRzOworICAgIGNvdW50cy5zZXQoaW1hZ2Vz
U3RyaW5nLCBtZW1vcnlDYWNoZVN0YXRpc3RpY3MuaW1hZ2VzLmNvdW50KTsKKyAgICBjb3VudHMu
c2V0KGNzc1N0cmluZywgbWVtb3J5Q2FjaGVTdGF0aXN0aWNzLmNzc1N0eWxlU2hlZXRzLmNvdW50
KTsKKyAgICBjb3VudHMuc2V0KHhzbFN0cmluZywgbWVtb3J5Q2FjaGVTdGF0aXN0aWNzLnhzbFN0
eWxlU2hlZXRzLmNvdW50KTsKKyAgICBjb3VudHMuc2V0KGphdmFTY3JpcHRTdHJpbmcsIG1lbW9y
eUNhY2hlU3RhdGlzdGljcy5zY3JpcHRzLmNvdW50KTsKKyAgICByZXN1bHQuYXBwZW5kKGNvdW50
cyk7CisgICAgCisgICAgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiBzaXplczsKKyAgICBzaXpl
cy5zZXQoaW1hZ2VzU3RyaW5nLCBtZW1vcnlDYWNoZVN0YXRpc3RpY3MuaW1hZ2VzLnNpemUpOwor
ICAgIHNpemVzLnNldChjc3NTdHJpbmcsIG1lbW9yeUNhY2hlU3RhdGlzdGljcy5jc3NTdHlsZVNo
ZWV0cy5zaXplKTsKKyAgICBzaXplcy5zZXQoeHNsU3RyaW5nLCBtZW1vcnlDYWNoZVN0YXRpc3Rp
Y3MueHNsU3R5bGVTaGVldHMuc2l6ZSk7CisgICAgc2l6ZXMuc2V0KGphdmFTY3JpcHRTdHJpbmcs
IG1lbW9yeUNhY2hlU3RhdGlzdGljcy5zY3JpcHRzLnNpemUpOworICAgIHJlc3VsdC5hcHBlbmQo
c2l6ZXMpOworICAgIAorICAgIEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4gbGl2ZVNpemVzOwor
ICAgIGxpdmVTaXplcy5zZXQoaW1hZ2VzU3RyaW5nLCBtZW1vcnlDYWNoZVN0YXRpc3RpY3MuaW1h
Z2VzLmxpdmVTaXplKTsKKyAgICBsaXZlU2l6ZXMuc2V0KGNzc1N0cmluZywgbWVtb3J5Q2FjaGVT
dGF0aXN0aWNzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplKTsKKyAgICBsaXZlU2l6ZXMuc2V0KHhz
bFN0cmluZywgbWVtb3J5Q2FjaGVTdGF0aXN0aWNzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplKTsK
KyAgICBsaXZlU2l6ZXMuc2V0KGphdmFTY3JpcHRTdHJpbmcsIG1lbW9yeUNhY2hlU3RhdGlzdGlj
cy5zY3JpcHRzLmxpdmVTaXplKTsKKyAgICByZXN1bHQuYXBwZW5kKGxpdmVTaXplcyk7CisgICAg
CisgICAgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiBkZWNvZGVkU2l6ZXM7CisgICAgZGVjb2Rl
ZFNpemVzLnNldChpbWFnZXNTdHJpbmcsIG1lbW9yeUNhY2hlU3RhdGlzdGljcy5pbWFnZXMuZGVj
b2RlZFNpemUpOworICAgIGRlY29kZWRTaXplcy5zZXQoY3NzU3RyaW5nLCBtZW1vcnlDYWNoZVN0
YXRpc3RpY3MuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOworICAgIGRlY29kZWRTaXplcy5z
ZXQoeHNsU3RyaW5nLCBtZW1vcnlDYWNoZVN0YXRpc3RpY3MueHNsU3R5bGVTaGVldHMuZGVjb2Rl
ZFNpemUpOworICAgIGRlY29kZWRTaXplcy5zZXQoamF2YVNjcmlwdFN0cmluZywgbWVtb3J5Q2Fj
aGVTdGF0aXN0aWNzLnNjcmlwdHMuZGVjb2RlZFNpemUpOworICAgIHJlc3VsdC5hcHBlbmQoZGVj
b2RlZFNpemVzKTsKKyAgICAKKyAgICBIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+IHB1cmdlYWJs
ZVNpemVzOworICAgIHB1cmdlYWJsZVNpemVzLnNldChpbWFnZXNTdHJpbmcsIG1lbW9yeUNhY2hl
U3RhdGlzdGljcy5pbWFnZXMucHVyZ2VhYmxlU2l6ZSk7CisgICAgcHVyZ2VhYmxlU2l6ZXMuc2V0
KGNzc1N0cmluZywgbWVtb3J5Q2FjaGVTdGF0aXN0aWNzLmNzc1N0eWxlU2hlZXRzLnB1cmdlYWJs
ZVNpemUpOworICAgIHB1cmdlYWJsZVNpemVzLnNldCh4c2xTdHJpbmcsIG1lbW9yeUNhY2hlU3Rh
dGlzdGljcy54c2xTdHlsZVNoZWV0cy5wdXJnZWFibGVTaXplKTsKKyAgICBwdXJnZWFibGVTaXpl
cy5zZXQoamF2YVNjcmlwdFN0cmluZywgbWVtb3J5Q2FjaGVTdGF0aXN0aWNzLnNjcmlwdHMucHVy
Z2VhYmxlU2l6ZSk7CisgICAgcmVzdWx0LmFwcGVuZChwdXJnZWFibGVTaXplcyk7CisgICAgCisg
ICAgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiBwdXJnZWRTaXplczsKKyAgICBwdXJnZWRTaXpl
cy5zZXQoaW1hZ2VzU3RyaW5nLCBtZW1vcnlDYWNoZVN0YXRpc3RpY3MuaW1hZ2VzLnB1cmdlZFNp
emUpOworICAgIHB1cmdlZFNpemVzLnNldChjc3NTdHJpbmcsIG1lbW9yeUNhY2hlU3RhdGlzdGlj
cy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXplKTsKKyAgICBwdXJnZWRTaXplcy5zZXQoeHNsU3Ry
aW5nLCBtZW1vcnlDYWNoZVN0YXRpc3RpY3MueHNsU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSk7Cisg
ICAgcHVyZ2VkU2l6ZXMuc2V0KGphdmFTY3JpcHRTdHJpbmcsIG1lbW9yeUNhY2hlU3RhdGlzdGlj
cy5zY3JpcHRzLnB1cmdlZFNpemUpOworICAgIHJlc3VsdC5hcHBlbmQocHVyZ2VkU2l6ZXMpOwor
fQorCit2b2lkIFdlYlByb2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0aWNzKHVpbnQ2NF90IGNhbGxi
YWNrSUQpCit7CisgICAgU3RhdGlzdGljc0RhdGEgZGF0YTsKKyAgICAKKyAgICAvLyBHYXRoZXIg
SmF2YVNjcmlwdCBzdGF0aXN0aWNzLgorICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKSk7CisgICAgICAgIGRhdGEuc3Rh
dGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOwor
ICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9i
amVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90
ZWN0ZWRPYmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQo
IkphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKSk7Cisg
ICAgICAgIAorICAgICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBl
Q291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKCkpOworICAgICAgICBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChwcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzLmdldCgpLCBkYXRhLmphdmFTY3JpcHRQcm90ZWN0ZWRPYmpl
Y3RUeXBlQ291bnRzKTsKKyAgICAgICAgCisgICAgICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IG9i
amVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9i
amVjdFR5cGVDb3VudHMoKSk7CisgICAgICAgIGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKG9iamVj
dFR5cGVDb3VudHMuZ2V0KCksIGRhdGEuamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMpOworICAg
ICAgICAKKyAgICAgICAgdWludDY0X3QgamF2YVNjcmlwdEhlYXBTaXplID0gSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRIZWFwU2l6ZSIsIGphdmFTY3JpcHRIZWFwU2l6ZSk7
CisgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0RnJlZVNpemUi
LCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKSAtIGph
dmFTY3JpcHRIZWFwU2l6ZSk7CisgICAgfQorCisgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGlj
cyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKKyAg
ICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiRmFzdE1hbGxvY1Jlc2VydmVkVk1CeXRlcyIs
IGZhc3RNYWxsb2NTdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlcyk7CisgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkZhc3RNYWxsb2NDb21taXR0ZWRWTUJ5dGVzIiwgZmFzdE1hbGxvY1N0
YXRpc3RpY3MuY29tbWl0dGVkVk1CeXRlcyk7CisgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5z
ZXQoIkZhc3RNYWxsb2NGcmVlTGlzdEJ5dGVzIiwgZmFzdE1hbGxvY1N0YXRpc3RpY3MuZnJlZUxp
c3RCeXRlcyk7CisgICAgCisgICAgLy8gR2F0aGVyIGljb24gc3RhdGlzdGljcy4KKyAgICBkYXRh
LnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSWNvblBhZ2VVUkxNYXBwaW5nQ291bnQiLCBpY29uRGF0
YWJhc2UoKS5wYWdlVVJMTWFwcGluZ0NvdW50KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJl
cnMuc2V0KCJJY29uUmV0YWluZWRQYWdlVVJMQ291bnQiLCBpY29uRGF0YWJhc2UoKS5yZXRhaW5l
ZFBhZ2VVUkxDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSWNvblJl
Y29yZENvdW50IiwgaWNvbkRhdGFiYXNlKCkuaWNvblJlY29yZENvdW50KCkpOworICAgIGRhdGEu
c3RhdGlzdGljc051bWJlcnMuc2V0KCJJY29uc1dpdGhEYXRhQ291bnQiLCBpY29uRGF0YWJhc2Uo
KS5pY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpKTsKKyAgICAKKyAgICAvLyBHYXRoZXIgZm9udCBz
dGF0aXN0aWNzLgorICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJDYWNoZWRGb250RGF0
YUNvdW50IiwgZm9udENhY2hlKCktPmZvbnREYXRhQ291bnQoKSk7CisgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkNhY2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudCIsIGZvbnRDYWNoZSgp
LT5pbmFjdGl2ZUZvbnREYXRhQ291bnQoKSk7CisgICAgCisgICAgLy8gR2F0aGVyIGdseXBoIHBh
Z2Ugc3RhdGlzdGljcy4KKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiR2x5cGhQYWdl
Q291bnQiLCBHbHlwaFBhZ2VUcmVlTm9kZTo6dHJlZUdseXBoUGFnZUNvdW50KCkpOworICAgIAor
ICAgIC8vIEdldCBXZWJDb3JlIG1lbW9yeSBjYWNoZSBzdGF0aXN0aWNzCisgICAgZ2V0V2ViQ29y
ZU1lbW9yeUNhY2hlU3RhdGlzdGljcyhkYXRhLndlYkNvcmVDYWNoZVN0YXRpc3RpY3MpOworICAg
IAorICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQ29udGV4dDo6RGlkR2V0V2Vi
Q29yZVN0YXRpc3RpY3MoZGF0YSwgY2FsbGJhY2tJRCksIDApOworfQorCit2b2lkIFdlYlByb2Nl
c3M6OmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKQoreworICAgIGdjQ29udHJvbGxl
cigpLmdhcmJhZ2VDb2xsZWN0Tm93KCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6c2V0SmF2YVNj
cmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGdjQ29u
dHJvbGxlcigpLnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGZsYWcp
OworfQorCit2b2lkIFdlYlByb2Nlc3M6OnBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3Qg
Q29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgbWVzc2FnZURhdGEpCit7CisgICAgSW5qZWN0ZWRCdW5k
bGUqIGluamVjdGVkQnVuZGxlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUo
KTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBPd25Q
dHI8Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyPiBkZWNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyOjpjcmVhdGUobWVzc2FnZURhdGEuZGF0YSgpLCBtZXNzYWdlRGF0YS5zaXplKCkpOwor
CisgICAgU3RyaW5nIG1lc3NhZ2VOYW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG1lc3Nh
Z2VOYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEFQSU9iamVjdD4gbWVzc2Fn
ZUJvZHk7CisgICAgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZUJvZHlE
ZWNvZGVyKG1lc3NhZ2VCb2R5KTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShtZXNzYWdlQm9k
eURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbmplY3RlZEJ1bmRsZS0+ZGlkUmVj
ZWl2ZU1lc3NhZ2UobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKK30KKworI2lmIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCitOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qIFdlYlByb2Nl
c3M6Om5ldHdvcmtDb25uZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQobV91c2VzTmV0d29ya1Byb2Nl
c3MpOworCisgICAgLy8gSWYgd2UndmUgbG9zdCBvdXIgY29ubmVjdGlvbiB0byB0aGUgbmV0d29y
ayBwcm9jZXNzIChlLmcuIGl0IGNyYXNoZWQpIHRyeSB0byByZS1lc3RhYmxpc2ggaXQuCisgICAg
aWYgKCFtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbikKKyAgICAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCk7CisgICAgCisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlLWVzdGFi
bGlzaCBpdCB0aGVuIHdlIGFyZSBiZXlvbmQgcmVjb3ZlcnkgYW5kIHNob3VsZCBjcmFzaC4KKyAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKQorICAgICAgICBDUkFTSCgpOworICAg
IAorICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5nZXQoKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzOjpuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKiBjb25uZWN0aW9uKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vz
cyk6IEhvdyBkbyB3ZSBoYW5kbGUgbm90IGhhdmluZyB0aGUgY29ubmVjdGlvbiB3aGVuIHRoZSBX
ZWJQcm9jZXNzIG5lZWRzIGl0PworICAgIC8vIElmIHRoZSBOZXR3b3JrUHJvY2VzcyBjcmFzaGVk
LCBmb3IgZXhhbXBsZS4gIERvIHdlIHJlc3Bhd24gaXQ/CisgICAgQVNTRVJUKG1fbmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKTsKKyAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24g
PT0gY29ubmVjdGlvbik7CisKKyAgICBtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA9IDA7Cisg
ICAgCisgICAgbV93ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXItPm5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpOworfQorCitXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXImIFdlYlByb2Nlc3M6OndlYlJlc291
cmNlTG9hZFNjaGVkdWxlcigpCit7CisgICAgcmV0dXJuICptX3dlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjsKK30KKworI2VuZGlmCisKKyNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1MpCit2b2lkIFdl
YlByb2Nlc3M6OnBsdWdpblByb2Nlc3NDcmFzaGVkKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBjb25z
dCBTdHJpbmcmIHBsdWdpblBhdGgsIHVpbnQzMl90IHByb2Nlc3NUeXBlKQoreworICAgIG1fcGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLT5wbHVnaW5Qcm9jZXNzQ3Jhc2hlZChwbHVnaW5Q
YXRoLCBzdGF0aWNfY2FzdDxQbHVnaW5Qcm9jZXNzOjpUeXBlPihwcm9jZXNzVHlwZSkpOworfQor
I2VuZGlmCisKK3ZvaWQgV2ViUHJvY2Vzczo6ZG93bmxvYWRSZXF1ZXN0KHVpbnQ2NF90IGRvd25s
b2FkSUQsIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdlSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBXZWJQYWdlKiBpbml0aWF0aW5nUGFnZSA9IGluaXRpYXRpbmdQYWdl
SUQgPyB3ZWJQYWdlKGluaXRpYXRpbmdQYWdlSUQpIDogMDsKKworICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0V2l0aE9yaWdpbmFsVVJMID0gcmVxdWVzdDsKKyAgICBpZiAoaW5pdGlhdGluZ1Bh
Z2UpCisgICAgICAgIGluaXRpYXRpbmdQYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPnNldE9y
aWdpbmFsVVJMRm9yRG93bmxvYWRSZXF1ZXN0KHJlcXVlc3RXaXRoT3JpZ2luYWxVUkwpOworCisg
ICAgZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChkb3dubG9hZElELCByZXF1ZXN0V2l0
aE9yaWdpbmFsVVJMKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpjYW5jZWxEb3dubG9hZCh1aW50
NjRfdCBkb3dubG9hZElEKQoreworICAgIGRvd25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2Fk
KGRvd25sb2FkSUQpOworfQorCisjaWYgUExBVEZPUk0oUVQpCit2b2lkIFdlYlByb2Nlc3M6OnN0
YXJ0VHJhbnNmZXIodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlv
bikKK3sKKyAgICBkb3dubG9hZE1hbmFnZXIoKS5zdGFydFRyYW5zZmVyKGRvd25sb2FkSUQsIGRl
c3RpbmF0aW9uKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYlByb2Nlc3M6OnNldEVuaGFuY2VkQWNj
ZXNzaWJpbGl0eShib29sIGZsYWcpCit7CisgICAgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c2V0
RW5oYW5jZWRVc2VySW50ZXJmYWNlQWNjZXNzaWJpbGl0eShmbGFnKTsKK30KKyAgICAKK3ZvaWQg
V2ViUHJvY2Vzczo6c3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYgc2FtcGxlTG9nRmlsZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBzYW1wbGVMb2dGaWxlUGF0
aCwgY29uc3QgZG91YmxlIGludGVydmFsKQoreworI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikg
ICAgCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0YXJ0KHNhbXBsZUxvZ0ZpbGVI
YW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBpbnRlcnZhbCk7CisjZW5kaWYKK30KKyAgICAKK3Zv
aWQgV2ViUHJvY2Vzczo6c3RvcE1lbW9yeVNhbXBsZXIoKQoreworI2lmIEVOQUJMRShNRU1PUllf
U0FNUExFUikKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RvcCgpOworI2VuZGlm
Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hl
Y2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQoreworICAgIGJvb2wgY29udGludW91c1NwZWxs
Q2hlY2tpbmdUdXJuZWRPZmYgPSAhdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCAmJiBtX3RleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQ7CisgICAgYm9vbCBncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYgPSAhdGV4dENo
ZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgJiYgbV90ZXh0Q2hlY2tlclN0YXRl
LmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKworICAgIG1fdGV4dENoZWNrZXJTdGF0ZSA9IHRl
eHRDaGVja2VyU3RhdGU7CisKKyAgICBpZiAoIWNvbnRpbnVvdXNTcGVsbENoZWNraW5nVHVybmVk
T2ZmICYmICFncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJQYWdlPiA+OjppdGVyYXRvciBlbmQgPSBtX3Bh
Z2VNYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZT4g
Pjo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFdlYlBhZ2UqIHBhZ2UgPSAoKml0KS52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKGNv
bnRpbnVvdXNTcGVsbENoZWNraW5nVHVybmVkT2ZmKQorICAgICAgICAgICAgcGFnZS0+dW5tYXJr
QWxsTWlzc3BlbGxpbmdzKCk7CisgICAgICAgIGlmIChncmFtbWFyQ2hlY2tpbmdUdXJuZWRPZmYp
CisgICAgICAgICAgICBwYWdlLT51bm1hcmtBbGxCYWRHcmFtbWFyKCk7CisgICAgfQorfQorCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFdlYlByb2Nlc3M6OmRpZEdldFBs
dWdpbnMoQ29yZUlQQzo6Q29ubmVjdGlvbiosIHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiBwbHVnaW5zKQoreworI2lmIFVTRShQTEFURk9STV9T
VFJBVEVHSUVTKQorICAgIC8vIFBhc3MgdGhpcyB0byBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
LgorICAgIGhhbmRsZURpZEdldFBsdWdpbnMocmVxdWVzdElELCBwbHVnaW5zKTsKKyNlbmRpZgor
fQorI2VuZGlmIC8vIEVOQUJMRShQTFVHSU5fUFJPQ0VTUykKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCmluZGV4IDEzYTQ2N2RlNmU5
NjBiNWEyZjlmZjAzMTRkZjIxNDUwNzEwZjZiYTcuLjJjODQ2MzcyNmQzZDljYjc5ZGE1MDA1OTBj
ZjFhMTI0YWI2ZjZlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBA
IC0xNTYsOCArMTU2LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoV2ViQ29y
ZTo6TGlua0hhc2gpOwogICAgIGJvb2wgaXNMaW5rVmlzaXRlZChXZWJDb3JlOjpMaW5rSGFzaCkg
Y29uc3Q7CiAKLSAgICBib29sIGlzUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHVuc2lnbmVkIHBsdWdJ
bk9yaWdpbmhhc2gpOworICAgIGJvb2wgaXNQbHVnSW5BdXRvU3RhcnRPcmlnaW4odW5zaWduZWQg
cGx1Z0luT3JpZ2luSGFzaCk7CiAgICAgdm9pZCBhZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW4oY29u
c3QgU3RyaW5nJiBwYWdlT3JpZ2luLCB1bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNoKTsKKyAgICB2
b2lkIHBsdWdJbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2lu
SGFzaCk7CiAKICAgICBib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Z1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQ7IH0KIApAQCAtMjQxLDggKzI0Miw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdGVkTGlua1N0YXRlQ2hhbmdlZChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6TGlua0hhc2g+JiBsaW5rSGFzaGVzKTsKICAgICB2b2lkIGFsbFZpc2l0ZWRMaW5r
U3RhdGVDaGFuZ2VkKCk7CiAKLSAgICB2b2lkIGRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbih1
bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNoKTsKLSAgICB2b2lkIHBsdWdJbkF1dG9TdGFydE9yaWdp
bnNDaGFuZ2VkKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGhhc2hlcyk7CisgICAgdm9pZCBkaWRB
ZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW4odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgZG91Ymxl
IGV4cGlyYXRpb25UaW1lKTsKKyAgICB2b2lkIHJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhj
b25zdCBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+JiBoYXNoZXMpOwogCiAgICAgdm9pZCBwbGF0
Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCk7CiAgICAgdm9pZCBwbGF0Zm9ybUNsZWFyUmVz
b3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyKTsKQEAgLTMyNiw3ICszMjcsNyBAQCBw
cml2YXRlOgogICAgIFZpc2l0ZWRMaW5rVGFibGUgbV92aXNpdGVkTGlua1RhYmxlOwogICAgIGJv
b2wgbV9zaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsKIAotICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1f
cGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+IG1f
cGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKIAogICAgIGJvb2wgbV9oYXNTZXRDYWNoZU1vZGVsOwog
ICAgIENhY2hlTW9kZWwgbV9jYWNoZU1vZGVsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDA1ZDA1NmRkNmY4YjA1Y2YxMzhhNTky
NDE4YTgyODBlMWQwMzg1ZGQuLjAxZTc5OTQ1NjRkZjdmYmU4OTRkMGEwY2Y0YWY3Mjc1ZTgzNjE2
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KQEAgLTcwLDggKzcwLDggQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyB7CiAgICAgR2V0
U2l0ZXNXaXRoUGx1Z2luRGF0YShWZWN0b3I8V1RGOjpTdHJpbmc+IHBsdWdpblBhdGhzLCB1aW50
NjRfdCBjYWxsYmFja0lEKQogICAgIENsZWFyUGx1Z2luU2l0ZURhdGEoVmVjdG9yPFdURjo6U3Ry
aW5nPiBwbHVnaW5QYXRocywgVmVjdG9yPFdURjo6U3RyaW5nPiBzaXRlcywgdWludDY0X3QgZmxh
Z3MsIHVpbnQ2NF90IG1heEFnZUluU2Vjb25kcywgdWludDY0X3QgY2FsbGJhY2tJRCkKICNlbmRp
ZgotICAgIERpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbih1aW50MzJfdCBoYXNoKQotICAgIFBs
dWdJbkF1dG9TdGFydE9yaWdpbnNDaGFuZ2VkKFZlY3Rvcjx1aW50MzJfdD4gaGFzaGVzKQorICAg
IERpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbih1aW50MzJfdCBoYXNoLCBkb3VibGUgZXhwaXJh
dGlvblRpbWUpCisgICAgUmVzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKEhhc2hNYXA8dWludDMy
X3QsZG91YmxlPiBoYXNoZXMpCiAKICNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1MpCiAgICAgUGx1
Z2luUHJvY2Vzc0NyYXNoZWQoU3RyaW5nIHBsdWdpblByb2Nlc3MsIHVpbnQzMl90IHByb2Nlc3NU
eXBlKSBEaXNwYXRjaE9uQ29ubmVjdGlvblF1ZXVlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181148</attachid>
            <date>2013-01-02 21:55:32 -0800</date>
            <delta_ts>2013-01-03 12:48:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105973-20130102215239.patch</filename>
            <type>text/plain</type>
            <size>29156</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE5MjUyM2RkZWMzNDRi
YjAzMjQ1NGQzN2UxNTk4N2IwN2M2YTg0Yi4uY2Q5ODg5ODEwN2JiYWQ1OTg0ZDI4NDgxMTk0YmFm
YTY2Njk0NjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTAyICBKb24g
TGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZlcnQgYXV0by1zdGFydCBwbHVn
aW5zIHRvIHNuYXBzaG90dGVkIHBsdWdpbnMgYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1OTczCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk0Nzg2NT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50OjpwbHVnSW5PcmlnaW5IYXNoKTogRXhw
b3NlIHB1YmxpY2x5IGZvciBXZWJLaXQyLgorICAgICAgICBSZW9yZ2FuaXplIHRoZSBwcm90ZWN0
ZWQgbWVtYmVycyBvZiB0aGUgY2xhc3MuCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6IE1vdmUgdGhlIG1lbWJlciB0byBIVE1MUGx1Z0luRWxlbWVudC4KKwogMjAxMy0w
MS0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gVjhE
T01XcmFwcGVyLmNwcCBoYXMgbWFueSBtb3JlIGluY2x1ZGVzIHRoYW4gbmVjZXNzYXJ5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZjFiYzM5MmYzNjU3M2VmZTQ1Y2Y3OTljYzYxMThiN2FjZDk4NTU2MS4uNzljYWU4
ODdjYTY5YzQ4ZGI5ZGRmMGMzNjk2NjUwNDQ1MWM1YTFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDc3IEBACisyMDEzLTAxLTAyICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZlcnQgYXV0by1zdGFydCBwbHVnaW5zIHRvIHNuYXBzaG90dGVkIHBsdWdpbnMgYWZ0ZXIg
YSBwZXJpb2Qgb2YgaW5hY3Rpdml0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1OTczCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjk0Nzg2NT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2Ug
dGhlIHNldCBvZiBvcmlnaW4gaGFzaGVzIG1haW50YWluZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHRv
IGEgaGFzaCBtYXAgdGhhdCBhc3NvY2lhdGVzCisgICAgICAgIGEgdGltZXN0YW1wIGZvciBlYWNo
IGhhc2guIElmIHRoZSBwbHVnLWluJ3Mgb3JpZ2luIGlzIG1hcmtlZCBmb3IgYXV0by1zdGFydCwg
d2UgYWxzbyBjaGVjaworICAgICAgICBpdCBhZ2FpbnN0IHRoZSB0aW1lc3RhbXAuIElmIHRoZSB0
aW1lIGlzIGxhdGVyLCB0aGVuIHdlIGNvbnNpZGVyIHRoZSBlbnRyeSBzdGFsZSwgYW5kIHNuYXBz
aG90CisgICAgICAgIHRoZSBwbHVnLWluIGluc3RlYWQuCisKKyAgICAgICAgQnV0LCBpZiB0aGUg
dXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgcGx1Zy1pbiwgd2UgZGVsYXkgdGhhdCBleHBpcmF0aW9u
IHRpbWVzdGFtcCBvdXQsIHNvIHRoYXQKKyAgICAgICAgaXQgZXhwaXJlcyBhIG1vbnRoIGZyb20g
Zmlyc3QgaW50ZXJhY3Rpb24uIFRvIGF2b2lkIHRvbyBtdWNoIGNoYXR0ZXIgYmV0d2VlbiB0aGUg
d2ViIHByb2Nlc3NlcworICAgICAgICBhbmQgVUkgcHJvY2Vzcywgd2Ugb25seSB1cGRhdGUgdGhl
IHRpbWVzdGFtcCBpZiBhIGRheSBhIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhl
CisgICAgICAgIHRpbWVzdGFtcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3Lmg6CisgICAgICAgIChQbHVnaW5WaWV3KTogQWRkIGEgbWVtYmVyIHZhcmlhYmxlIHRv
IGZsYWcgd2hldGhlciB0aGUgdXNlciBoYWQgaW50ZXJhY3RlZCB3aXRoIHRoZSBwbHVnLWluLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6UGx1Z2luVmlldyk6IEluaXRpYWxpemUgdGhlIGZsYWcgdG8gZmFs
c2UuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KTogV2UgY29uc2lk
ZXIgbW91c2UgZG93biwgdXAsIHdoZWVsLCBjb250ZXh0IG1lbnUsIGFuZCBrZXlib2FyZAorICAg
ICAgICBldmVudHMgYXMgdXNlciBpbnRlcmFjdGlvbi4gRG8gbm90IGNvbnNpZGVyIG1vdXNlIGVu
dGVyLCBsZWF2ZSwgYW5kIG1vdmUgZXZlbnRzIGFzIHVzZXIKKyAgICAgICAgaW50ZXJhY3Rpb24u
IEFsc28sIHJlbW92ZSB1bm5lZWRlZCBjb21tZW50cy4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
Vmlldzo6cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbik6IElmIHRoaXMgaXMgdGhlIGZp
cnN0IHRpbWUgdGhlIGZ1bmN0aW9uIGlzCisgICAgICAgIGNhbGxlZCwgdGVsbCB0aGUgd2ViIHBy
b2Nlc3MsIHNvIHRoYXQgdGhlIGV4cGlyYXRpb24gdGltZXN0YW1wIGNhbiBiZSB1cGRhdGVkLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOiBVcGRhdGUgdGhl
IG1lc3NhZ2VzIHRvIGluY2x1ZGUgdGhlIGV4cGlyYXRpb24gdGltZS4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYlByb2Nlc3MpOiBVcGRhdGUgdGhlIGNh
Y2hlZCBjb3B5IG9mIHRoZSBhdXRvLXN0YXJ0IG9yaWdpbnMgdG8gaW5jbHVkZSB0aGVpciBleHBp
cmF0aW9uCisgICAgICAgIHRpbWVzdGFtcHMuIFVwZGF0ZSB0aGUgbWVzc2FnZSBzaWduYXR1cmVz
LiBBZGQgYSBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIGV4cGlyYXRpb24gdGltZXN0YW1wCisgICAg
ICAgIGZvciBhIHNwZWNpZmljIG9yaWdpbi4gUmVuYW1lIHBsdWdJbkF1dG9TdGFydE9yaWdpbnND
aGFuZ2VkIHRvIHJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFs
aXplV2ViUHJvY2Vzcyk6IEluc3RlYWQgb2YgaW5kaXZpZHVhbGx5IGFkZGluZyB0aGUgb3JpZ2lu
cyBpbiB0aGUKKyAgICAgICAgcHJvdmlkZWQgdmVjdG9yLCBqdXN0IGNhbGwgcmVzZXRQbHVnSW5B
dXRvU3RhcnRPcmlnaW5zKCkuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmlzUGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luKTogQ2hlY2sgdG8gc2VlIGlmIHRoZSBvcmlnaW4gaXMgaW4gdGhlIHRh
YmxlLCBhbmQgaWYKKyAgICAgICAgc28sIGNoZWNrIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0
aGUgZXhwaXJhdGlvbiB0aW1lLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkaWRBZGRQ
bHVnSW5BdXRvU3RhcnRPcmlnaW4pOiBVcGRhdGUgdGhlIGNhY2hlZCB0YWJsZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6cmVzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKTogU3dhcCB0
aGUgdGFibGVzIGJldHdlZW4gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcgorICAgICAgICBhbmQgdGhl
IG1lbWJlciB2YXJpYWJsZS4gV2UgY2FuIHNhZmVseSBkbyB0aGlzIGJlY2F1c2UgdGhlIGZ1bmN0
aW9uIGlzIGNhbGxlZCBpbiB0d28gY2FzZXMgd2hlcmUKKyAgICAgICAgdGhlIHBhcmFtZXRlciBp
cyBhZnRlcndhcmRzIHRocm93biBhd2F5OiB3aGVuIGEgbmV3IHdlYiBwcm9jZXNzIGlzIGNyZWF0
ZWQsIGFuZCB3aGVuIGl0IGlzIGNhbGxlZAorICAgICAgICB0aHJvdWdoIGFuIElQQyBtZXNzYWdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbHVnSW5EaWRSZWNlaXZlVXNlckludGVy
YWN0aW9uKTogV2hlbiBpbnZva2VkLCB3ZSB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvCisgICAgICAg
IHVwZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgZ2l2ZW4gb3JpZ2luIGlmIHRoZSB0
aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZXhwaXJhdGlvbgorICAgICAgICB0aW1lIGFuZCB0
aGUgY3VycmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgdGhyZXNob2xkIHBsdWdJbkF1dG9TdGFy
dEV4cGlyYXRpb25UaW1lVXBkYXRlVGhyZXNob2xkLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvbnRleHQubWVzc2FnZXMuaW46IEFkZCBtZXNzYWdlIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhl
IHdlYiBwcm9jZXNzIHdhbnRzIHRvCisgICAgICAgIHVwZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1l
c3RhbXAgZm9yIHRoZSBwbHVnLWluIG9yaWdpbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsdWdJbkRpZFJlY2VpdmVV
c2VySW50ZXJhY3Rpb24pOiBGb3J3YXJkIHRvIHRoZSBwcm92aWRlci4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViQ29udGV4dC5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpleHBpcmF0aW9uVGltZUZy
b21Ob3cpOiBSZXR1cm5zIGEgbmV3IHRpbWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZSArIDEg
bW9udGguCisgICAgICAgIChXZWJLaXQ6OlBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjphZGRBdXRv
U3RhcnRPcmlnaW4pOiBSZWZhY3Rvci4gU2V0IHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZQor
ICAgICAgICBhZGRlZCBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OlBsdWdJbkF1dG9TdGFydFBy
b3ZpZGVyOjphdXRvU3RhcnRPcmlnaW5zQ29weSk6IFJlZmFjdG9yLgorICAgICAgICAoV2ViS2l0
OjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6YXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSk6IFJl
ZmFjdG9yIHRvIGluY2x1ZGUgdGhlIGV4cGlyYXRpb24KKyAgICAgICAgdGltZXMuIEFsc28sIGNo
ZWNrIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgZXhwaXJhdGlvbiB0aW1lLiBJZiB3ZSBh
cmUgcGFzdCB0aGUgdGltZSwgcmVtb3ZlCisgICAgICAgIHRoZSBlbnRyeSBmcm9tIHRoZSBjb3B5
LgorICAgICAgICAoV2ViS2l0OjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6c2V0QXV0b1N0YXJ0
T3JpZ2luc1RhYmxlKTogUmVmYWN0b3IgdG8gZXh0cmFjdCBhbmQgZHVwbGljYXRlCisgICAgICAg
IHRoZSBwcm92aWRlZCBtYXAgb2Ygb3JpZ2lucyBhbmQgZXhwaXJhdGlvbiB0aW1lc3RhbXBzLgor
ICAgICAgICAoV2ViS2l0OjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6ZGlkUmVjZWl2ZVVzZXJJ
bnRlcmFjdGlvbik6IExvb2sgZm9yIHRoZSBvcmlnaW4gaGFzaC4gSWYgZm91bmQsCisgICAgICAg
IHVwZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lLiBVcGRhdGUgYWxsIGV4aXN0aW5nIHdlYiBwcm9j
ZXNzZXMgd2l0aCB0aGUgbmV3IGV4cGlyYXRpb24gdGltZSwgYW5kCisgICAgICAgIHRlbGwgdGhl
IGNvbnRleHQgY2xpZW50IHRoYXQgdGhlIGhhc2hlcyBoYXZlIGNoYW5nZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuaDoKKyAgICAgICAgKFBs
dWdJbkF1dG9TdGFydFByb3ZpZGVyKTogQ2hhbmdlIHRoZSBtX2F1dG9TdGFydEhhc2hlcyB2YXJp
YWJsZSB0byBhIG1hcCBvZiBhIGhhc2ggdG8gaXRzIGRvbWFpbgorICAgICAgICBlbnRyeSBpbiB0
aGUgYXV0by1zdGFydCB0YWJsZS4gSXQgaXMgdXNlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGF1
dG8tc3RhcnQgdGFibGUgYW5kIHVwZGF0ZQorICAgICAgICB0aGUgb3JpZ2luJ3MgZXhwaXJhdGlv
biB0aW1lLgorCisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aDoKKyAgICAgICAgKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMpOiBTd2l0Y2ggdGhlIGNy
ZWF0aW9uIHBhcmFtZXRlciB0byBzZWVkIHRoZSBvcmlnaW4gdGFibGUgdG8gYSBtYXAuCisKIDIw
MTMtMDEtMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGYWN0b3Ig
b3V0IE5ldHdvcmtQcm9jZXNzIGluaXRpYWxpemF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbiBp
biBwcmVwYXJhdGlvbiBvZiBhZGRpbmcgYSBOZXR3b3JrUHJvY2VzcyBzZXJ2aWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKaW5kZXggNWE2MmQ1NGYzNDMwOTJiZGJjYmZh
MDZkNzcxOTZjNDc5ZmJhYTRkZi4uMTE2MzNjNmE3MzcwYjNkZWYyYjhjZTk1NzA4YTBiMjBkYjZj
Nzc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaApAQCAtNTksNiAr
NTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNuYXBzaG90KFBhc3NSZWZQ
dHI8SW1hZ2U+KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTW91c2VDbGlj
aygpIHsgfQogCisgICAgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGx1Z0luT3JpZ2luSGFzaDsgfQorCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAgICAgTlBPYmplY3QqIGdldE5QT2JqZWN0KCk7CiAjZW5kaWYKQEAgLTgwLDEwICs4MiwxMyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBTdHlsZVByb3BlcnR5U2V0KikgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBib29sIGFyZUF1dGhvclNoYWRvd3NBbGxvd2VkKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgbV9pbkJlZm9yZUxvYWRFdmVudEhhbmRs
ZXI7CiAgICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgdXNlIGd1YXJkZWREaXNwYXRjaEJlZm9yZUxv
YWRFdmVudCBpbnN0ZWFkIG9mIGNhbGxpbmcgZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQgZGlyZWN0
bHkuCiAgICAgYm9vbCBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpOwogCisgICAgYm9vbCBtX2luQmVmb3JlTG9hZEV2ZW50SGFuZGxlcjsKKwor
ICAgIHVuc2lnbmVkIG1fcGx1Z0luT3JpZ2luSGFzaDsKKwogcHJpdmF0ZToKICAgICBib29sIGRp
c3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsgLy8gTm90IGlt
cGxlbWVudGVkLCBnZW5lcmF0ZXMgYSBjb21waWxlIGVycm9yIGlmIHN1YmNsYXNzZXMgY2FsbCB0
aGlzIGJ5IG1pc3Rha2UuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmgKaW5kZXggYWEwYTg2MDVkYTkwNjIwMTI2NzE4MjA1NzBiODk0MzAyMTY5OWY3NC4u
NjU0YjYzZTExNzkyMWQ4ZDgyNGMzNjRlODQwNzhiY2ZkMjQ5OWU1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKQEAgLTEwOCw3ICsxMDgsNiBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9jdXN0b21TdHlsZUZvclBhZ2VDYWNo
ZTsKICAgICBSZWZQdHI8TW91c2VFdmVudD4gbV9wZW5kaW5nQ2xpY2tFdmVudEZyb21TbmFwc2hv
dDsKICAgICBEZWZlcnJhYmxlT25lU2hvdFRpbWVyPEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+IG1f
c2ltdWxhdGVkTW91c2VDbGlja1RpbWVyOwotICAgIHVuc2lnbmVkIG1fcGx1Z0luT3JpZ2luSGFz
aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDllYTcwZDJjMzY4
ZWZlMzhhYTk3OWI1YWRlMWYxZTgyZmY5MTFmZjEuLmI3MjdmNDBiZDhjZDk2NDliMTM2NGI1MjA5
Nzk1NWE1NTc5MmRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0cnVjdCBXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBib29sIHVzZXNOZXR3b3JrUHJvY2VzczsK
ICNlbmRpZgogCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwbHVnSW5BdXRvU3RhcnRPcmlnaW5zOwor
ICAgIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4gcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwCmluZGV4IGEy
NjQ5NzM0ZTBhYTMwZGZhMzc1NDllZTM2MmQ2NDYyY2MzMGZlNDkuLmRkOTdjZThiMTgzZjYwYWI2
MzQ5YzVjN2Y0Y2FlMGE3OWJjZDQxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAKQEAgLTMy
LDYgKzMyLDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBjb25zdCBk
b3VibGUgcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRpbWVUaHJlc2hvbGQgPSAzMCAqIDI0ICog
NjA7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6UGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIoV2ViQ29udGV4dCogY29udGV4dCkKQEAgLTM5LDYgKzQxLDEx
IEBAIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcihXZWJD
b250ZXh0KiBjb250ZXh0KQogewogfQogCitzdGF0aWMgZG91YmxlIGV4cGlyYXRpb25UaW1lRnJv
bU5vdygpCit7CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgKyBwbHVnSW5BdXRvU3RhcnRFeHBp
cmF0aW9uVGltZVRocmVzaG9sZDsKK30KKwogdm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6
YWRkQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1
Z0luT3JpZ2luSGFzaCkKIHsKICAgICBpZiAobV9hdXRvU3RhcnRIYXNoZXMuY29udGFpbnMocGx1
Z0luT3JpZ2luSGFzaCkpCkBAIC00NiwzMiArNTMsNDQgQEAgdm9pZCBQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlcjo6YWRkQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5z
aWcKICAgICAKICAgICBBdXRvU3RhcnRUYWJsZTo6aXRlcmF0b3IgaXQgPSBtX2F1dG9TdGFydFRh
YmxlLmZpbmQocGFnZU9yaWdpbik7CiAgICAgaWYgKGl0ID09IG1fYXV0b1N0YXJ0VGFibGUuZW5k
KCkpCi0gICAgICAgIGl0ID0gbV9hdXRvU3RhcnRUYWJsZS5hZGQocGFnZU9yaWdpbiwgSGFzaFNl
dDx1bnNpZ25lZD4oKSkuaXRlcmF0b3I7CisgICAgICAgIGl0ID0gbV9hdXRvU3RhcnRUYWJsZS5h
ZGQocGFnZU9yaWdpbiwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPigpKS5pdGVyYXRvcjsKKwor
ICAgIGRvdWJsZSBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lRnJvbU5vdygpOworICAg
IGl0LT52YWx1ZS5zZXQocGx1Z0luT3JpZ2luSGFzaCwgZXhwaXJhdGlvblRpbWUpOworICAgIG1f
YXV0b1N0YXJ0SGFzaGVzLnNldChwbHVnSW5PcmlnaW5IYXNoLCBwYWdlT3JpZ2luKTsKICAgICAK
LSAgICBpdC0+dmFsdWUuYWRkKHBsdWdJbk9yaWdpbkhhc2gpOwotICAgIG1fYXV0b1N0YXJ0SGFz
aGVzLmFkZChwbHVnSW5PcmlnaW5IYXNoKTsKLSAgICBtX2NvbnRleHQtPnNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHBs
dWdJbk9yaWdpbkhhc2gpKTsKKyAgICBtX2NvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6RGlkQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHBsdWdJbk9yaWdp
bkhhc2gsIGV4cGlyYXRpb25UaW1lKSk7CiAgICAgbV9jb250ZXh0LT5jbGllbnQoKS5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXNDaGFuZ2VkKG1fY29udGV4dCk7CiB9CiAKLVZlY3Rvcjx1bnNp
Z25lZD4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmF1dG9TdGFydE9yaWdpbnNDb3B5KCkgY29u
c3QKK0hhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmF1
dG9TdGFydE9yaWdpbnNDb3B5KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGNvcHlW
ZWN0b3I7Ci0gICAgY29weVRvVmVjdG9yKG1fYXV0b1N0YXJ0SGFzaGVzLCBjb3B5VmVjdG9yKTsK
LSAgICByZXR1cm4gY29weVZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+IGNv
cHlNYXA7CisgICAgQXV0b1N0YXJ0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYXV0b1N0
YXJ0VGFibGUuZW5kKCk7CisgICAgZm9yIChBdXRvU3RhcnRUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2F1dG9TdGFydFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+Ojpjb25zdF9pdGVyYXRvciBtYXBFbmQgPSBpdC0+
dmFsdWUuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPjo6Y29u
c3RfaXRlcmF0b3IgbWFwSXQgPSBpdC0+dmFsdWUuYmVnaW4oKTsgbWFwSXQgIT0gbWFwRW5kOyAr
K21hcEl0KQorICAgICAgICAgICAgY29weU1hcC5zZXQobWFwSXQtPmtleSwgbWFwSXQtPnZhbHVl
KTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHlNYXA7CiB9CiAKIFBhc3NSZWZQdHI8SW1tdXRhYmxl
RGljdGlvbmFyeT4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmF1dG9TdGFydE9yaWdpbnNUYWJs
ZUNvcHkoKSBjb25zdAogewogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwog
ICAgIEF1dG9TdGFydFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2F1dG9TdGFydFRhYmxl
LmVuZCgpOworICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGZvciAoQXV0b1N0
YXJ0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdXRvU3RhcnRUYWJsZS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gaGFz
aGVzOwotICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3IgdmFsdWVFbmQgPSBpdC0+
dmFsdWUuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yIHZh
bHVlSXQgPSBpdC0+dmFsdWUuYmVnaW4oKTsgdmFsdWVJdCAhPSB2YWx1ZUVuZDsgKyt2YWx1ZUl0
KQotICAgICAgICAgICAgaGFzaGVzLmFwcGVuZChXZWJVSW50NjQ6OmNyZWF0ZSgqdmFsdWVJdCkp
OworICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIGhhc2hNYXA7CisgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT46OmNvbnN0X2l0ZXJhdG9yIHZhbHVlRW5kID0gaXQt
PnZhbHVlLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT46OmNv
bnN0X2l0ZXJhdG9yIHZhbHVlSXQgPSBpdC0+dmFsdWUuYmVnaW4oKTsgdmFsdWVJdCAhPSB2YWx1
ZUVuZDsgKyt2YWx1ZUl0KSB7CisgICAgICAgICAgICBpZiAobm93ID4gdmFsdWVJdC0+dmFsdWUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBoYXNoTWFwLnNldChTdHJp
bmc6Om51bWJlcih2YWx1ZUl0LT5rZXkpLCBXZWJEb3VibGU6OmNyZWF0ZSh2YWx1ZUl0LT52YWx1
ZSkpOworICAgICAgICB9CiAKLSAgICAgICAgbWFwLnNldChpdC0+a2V5LCBJbW11dGFibGVBcnJh
eTo6YWRvcHQoaGFzaGVzKSk7CisgICAgICAgIGlmIChoYXNoTWFwLnNpemUoKSkKKyAgICAgICAg
ICAgIG1hcC5zZXQoaXQtPmtleSwgSW1tdXRhYmxlRGljdGlvbmFyeTo6YWRvcHQoaGFzaE1hcCkp
OwogICAgIH0KIAogICAgIHJldHVybiBJbW11dGFibGVEaWN0aW9uYXJ5OjphZG9wdChtYXApOwpA
QCAtODEsMjQgKzEwMCw0NiBAQCB2b2lkIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjpzZXRBdXRv
U3RhcnRPcmlnaW5zVGFibGUoSW1tdXRhYmxlRGljdGlvbmFyeSYgdGFibAogewogICAgIG1fYXV0
b1N0YXJ0VGFibGUuY2xlYXIoKTsKICAgICBtX2F1dG9TdGFydEhhc2hlcy5jbGVhcigpOwotICAg
IFZlY3Rvcjx1bnNpZ25lZD4gaGFzaFZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3Vi
bGU+IGhhc2hNYXA7CiAKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSB0YWJsZS5tYXAoKS5lbmQoKTsKICAgICBmb3IgKEltbXV0YWJsZURpY3Rp
b25hcnk6Ok1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFibGUubWFwKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGhhc2hlczsKLSAg
ICAgICAgSW1tdXRhYmxlQXJyYXkqIHRhYmxlSGFzaGVzID0gc3RhdGljX2Nhc3Q8SW1tdXRhYmxl
QXJyYXkqPihpdC0+dmFsdWUuZ2V0KCkpOwotICAgICAgICBzaXplX3QgaGFzaFNldFNpemUgPSB0
YWJsZUhhc2hlcy0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hT
ZXRTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odGFibGVIYXNoZXMtPmF0PFdlYlVJbnQ2ND4oaSktPnZhbHVlKCkpOwotICAgICAg
ICAgICAgaGFzaGVzLmFkZChoYXNoKTsKLSAgICAgICAgICAgIG1fYXV0b1N0YXJ0SGFzaGVzLmFk
ZChoYXNoKTsKLSAgICAgICAgICAgIGhhc2hWZWN0b3IuYXBwZW5kKGhhc2gpOworICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+IGhhc2hlczsKKyAgICAgICAgSW1tdXRhYmxlRGljdGlv
bmFyeSogaGFzaGVzRm9yUGFnZSA9IHN0YXRpY19jYXN0PEltbXV0YWJsZURpY3Rpb25hcnkqPihp
dC0+dmFsdWUuZ2V0KCkpOworICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpj
b25zdF9pdGVyYXRvciBoYXNoRW5kID0gaGFzaGVzRm9yUGFnZS0+bWFwKCkuZW5kKCk7CisgICAg
ICAgIGZvciAoSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaGFz
aEl0ID0gaGFzaGVzRm9yUGFnZS0+bWFwKCkuYmVnaW4oKTsgaGFzaEl0ICE9IGhhc2hFbmQ7ICsr
aGFzaEl0KSB7CisgICAgICAgICAgICBib29sIG9rOworICAgICAgICAgICAgdW5zaWduZWQgaGFz
aCA9IGhhc2hJdC0+a2V5LnRvVUludCgmb2spOworICAgICAgICAgICAgaWYgKCFvaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGhhc2hJdC0+dmFsdWUtPnR5
cGUoKSAhPSBXZWJEb3VibGU6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGRvdWJsZSBleHBpcmF0aW9uVGltZSA9IHN0YXRpY19jYXN0PFdlYkRvdWJs
ZSo+KGhhc2hJdC0+dmFsdWUuZ2V0KCkpLT52YWx1ZSgpOworICAgICAgICAgICAgaGFzaGVzLnNl
dChoYXNoLCBleHBpcmF0aW9uVGltZSk7CisgICAgICAgICAgICBoYXNoTWFwLnNldChoYXNoLCBl
eHBpcmF0aW9uVGltZSk7CisgICAgICAgICAgICBtX2F1dG9TdGFydEhhc2hlcy5zZXQoaGFzaCwg
aXQtPmtleSk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2F1dG9TdGFydFRhYmxlLmFkZChpdC0+
a2V5LCBoYXNoZXMpOworICAgICAgICBtX2F1dG9TdGFydFRhYmxlLnNldChpdC0+a2V5LCBoYXNo
ZXMpOwogICAgIH0KIAotICAgIG1fY29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpQbHVnSW5BdXRvU3RhcnRPcmlnaW5zQ2hhbmdlZChoYXNoVmVjdG9yKSk7
CisgICAgbV9jb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhoYXNoTWFwKSk7Cit9CisKK3ZvaWQgUGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXI6OmRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1
Z0luT3JpZ2luSGFzaCkKK3sKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fYXV0b1N0YXJ0SGFzaGVzLmZpbmQocGx1Z0luT3JpZ2luSGFzaCk7Cisg
ICAgaWYgKGl0ID09IG1fYXV0b1N0YXJ0SGFzaGVzLmVuZCgpKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91YmxlIG5ld0V4
cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVGcm9tTm93KCk7CisgICAgbV9hdXRvU3RhcnRU
YWJsZS5maW5kKGl0LT52YWx1ZSktPnZhbHVlLnNldChwbHVnSW5PcmlnaW5IYXNoLCBuZXdFeHBp
cmF0aW9uVGltZSk7CisgICAgbV9jb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OkRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbihwbHVnSW5PcmlnaW5IYXNo
LCBuZXdFeHBpcmF0aW9uVGltZSkpOworICAgIG1fY29udGV4dC0+Y2xpZW50KCkucGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzQ2hhbmdlZChtX2NvbnRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdJbkF1dG9TdGFydFByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5oCmluZGV4IDMyNGUzMjYyNjQ4ZjU1NDE3NGM1MmZl
ZDc4NTQ4NDZkYjcyYTNhMjcuLmUyNDY2MTA0NjZkOWRmY2FhYjI2NDE1MjlkOWM2MmQyZmMwZTFh
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdJbkF1
dG9TdGFydFByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuaApAQCAtNDMsMTYgKzQzLDE3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRkQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5z
aWduZWQgcGx1Z0luT3JpZ2luSGFzaCk7CiAKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGF1dG9TdGFy
dE9yaWdpbnNDb3B5KCkgY29uc3Q7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPiBhdXRv
U3RhcnRPcmlnaW5zQ29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlv
bmFyeT4gYXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSgpIGNvbnN0OwogICAgIHZvaWQgc2V0QXV0
b1N0YXJ0T3JpZ2luc1RhYmxlKEltbXV0YWJsZURpY3Rpb25hcnkmKTsKKyAgICB2b2lkIGRpZFJl
Y2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCk7CiAKIHByaXZh
dGU6CiAgICAgV2ViQ29udGV4dCogbV9jb250ZXh0OwogICAgIAotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIEhhc2hTZXQ8dW5zaWduZWQ+LCBDYXNlRm9sZGluZ0hhc2g+IEF1dG9TdGFydFRh
YmxlOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJs
ZT4sIENhc2VGb2xkaW5nSGFzaD4gQXV0b1N0YXJ0VGFibGU7CiAgICAgQXV0b1N0YXJ0VGFibGUg
bV9hdXRvU3RhcnRUYWJsZTsKLSAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX2F1dG9TdGFydEhhc2hl
czsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBTdHJpbmc+IG1fYXV0b1N0YXJ0SGFzaGVzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4
dC5jcHAKaW5kZXggMWRmNWI4Njc5MTlhZmNmMDJkZTY2ZDdiMjNmMWI1NzQxYTY2MWRkNC4uZWIy
ZWRhMmMzOGY3Njg1ODhmMzZkYmFlMTYwZmYwNTVmYjNkYmY5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmNwcApAQCAtMTE0Myw2ICsxMTQzLDExIEBAIHZvaWQgV2ViQ29u
dGV4dDo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChjb25zdCBTdHJpbmcmIHBhZ2VPcmln
aW4sIHVuc2lnbmVkCiAgICAgbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5hZGRBdXRvU3RhcnRP
cmlnaW4ocGFnZU9yaWdpbiwgcGx1Z0luT3JpZ2luSGFzaCk7CiB9CiAKK3ZvaWQgV2ViQ29udGV4
dDo6cGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbih1bnNpZ25lZCBwbHVnSW5PcmlnaW5I
YXNoKQoreworICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuZGlkUmVjZWl2ZVVzZXJJbnRl
cmFjdGlvbihwbHVnSW5PcmlnaW5IYXNoKTsKK30KKwogUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0
aW9uYXJ5PiBXZWJDb250ZXh0OjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmF1dG9TdGFydE9yaWdpbnNU
YWJsZUNvcHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCmluZGV4IGZmMDIz
ZTVjZmUyNzgyOTNjZWU4MDk3NzQ3NDYyNWJkNzg2ZWNlNGIuLjU1ZWJjYTUxMzAzYjJmZWM3YzYy
OTNmZWY1NDAzYTkzMGU3N2MwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
aApAQCAtMzY2LDYgKzM2Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgYWRkUGx1
Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChjb25zdCBTdHJpbmcmIHBhZ2VPcmlnaW4sIHVuc2lnbmVk
IHBsdWdJbk9yaWdpbkhhc2gpOworICAgIHZvaWQgcGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFj
dGlvbih1bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNoKTsKIAogICAgIENvcmVJUEM6Ok1lc3NhZ2VS
ZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgppbmRleCA4MzljYmNjY2FiNjMyYzMxNDIw
ZTU2MzA1Njg2ZWMyOGEyNDJhMGExLi5mMmVkYjFkNjNlZWRkMmQ1NTlmZmQwOTlkMDEyODdiMDFj
ZjJmNDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNz
YWdlcy5pbgpAQCAtNTQsNCArNTQsNSBAQCBtZXNzYWdlcyAtPiBXZWJDb250ZXh0IHsKIAogICAg
ICMgUGx1Zy1pbiBtZXNzYWdlcy4KICAgICB2b2lkIEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhh
c2goV1RGOjpTdHJpbmcgcGFnZU9yaWdpbiwgdWludDMyX3QgaGFzaCkKKyAgICB2b2lkIFBsdWdJ
bkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odWludDMyX3QgaGFzaCkKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAzNzgyNjli
NzczMzcyMTVkM2QyMzZhMzE3M2I3MTRlODlhMTc0NjZmLi41Zjk2YTJhNTE5YTNlM2E1OGVkZWU3
ZjRkMTFiMmIzNGE0MzZlYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0yNzUsNiArMjc1LDcgQEAgUGx1Z2luVmlldzo6UGx1
Z2luVmlldyhQYXNzUmVmUHRyPEhUTUxQbHVnSW5FbGVtZW50PiBwbHVnaW5FbGVtZW50LCBQYXNz
UmVmUHRyPFAKICAgICAsIG1fbWFudWFsU3RyZWFtU3RhdGUoU3RyZWFtU3RhdGVJbml0aWFsKQog
ICAgICwgbV9wbHVnaW5TbmFwc2hvdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3OjpwbHVnaW5TbmFw
c2hvdFRpbWVyRmlyZWQsIHBsdWdpblNuYXBzaG90VGltZXJEZWxheSkKICAgICAsIG1fY291bnRT
bmFwc2hvdFJldHJpZXMoMCkKKyAgICAsIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbihmYWxz
ZSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiB7CiAgICAgbV93ZWJQYWdlLT5hZGRQbHVn
aW5WaWV3KHRoaXMpOwpAQCAtODEwLDggKzgxMSw2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1v
dXNlTW92ZSkKICAgICAgICAgfHwgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGN1cnJlbnRFdmVudC0+dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24p
CiAgICAgICAgIHx8IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQg
JiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlVXApKSB7Ci0gICAgICAg
IC8vIFdlIGhhdmUgYSBtb3VzZSBldmVudC4KLQogICAgICAgICAvLyBGSVhNRTogQ2xpY2tpbmcg
aW4gYSBzY3JvbGwgYmFyIHNob3VsZCBub3QgY2hhbmdlIGZvY3VzLgogICAgICAgICBpZiAoY3Vy
cmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgewogICAgICAgICAgICAg
Zm9jdXNQbHVnaW5FbGVtZW50KCk7CkBAIC04MjAsMjIgKzgxOSwyMiBAQCB2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIGZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CiAKICAgICAgICAgZGlk
SGFuZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxjb25z
dCBXZWJNb3VzZUV2ZW50Jj4oKmN1cnJlbnRFdmVudCkpOworICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgICAgICBwbHVnaW5E
aWRSZWNlaXZlVXNlckludGVyYWN0aW9uKCk7CiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkg
PT0gV2ViRXZlbnQ6OldoZWVsICYmIG1fcGx1Z2luLT53YW50c1doZWVsRXZlbnRzKCkpIHsKLSAg
ICAgICAgLy8gV2UgaGF2ZSBhIHdoZWVsIGV2ZW50LgogICAgICAgICBkaWRIYW5kbGVFdmVudCA9
IG1fcGx1Z2luLT5oYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PGNvbnN0IFdlYldoZWVsRXZl
bnQmPigqY3VycmVudEV2ZW50KSk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCAmJiBjdXJyZW50RXZlbnQtPnR5cGUoKSA9PSBXZWJF
dmVudDo6TW91c2VNb3ZlKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBtb3VzZSBlbnRlciBldmVu
dC4KKyAgICAgICAgcGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbigpOworICAgIH0gZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgJiYgY3Vy
cmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkKICAgICAgICAgZGlkSGFu
ZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlTW91c2VFbnRlckV2ZW50KHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPigqY3VycmVudEV2ZW50KSk7Ci0gICAgfSBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50ICYmIGN1cnJlbnRFdmVudC0+
dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZU1vdmUpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIG1v
dXNlIGxlYXZlIGV2ZW50LgorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3V0RXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1v
dXNlTW92ZSkKICAgICAgICAgZGlkSGFuZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlTW91c2VM
ZWF2ZUV2ZW50KHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPigqY3VycmVudEV2ZW50
KSk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0
bWVudUV2ZW50ICYmIGN1cnJlbnRFdmVudC0+dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24p
IHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbnRleHQgbWVudSBldmVudC4KKyAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50ICYmIGN1cnJl
bnRFdmVudC0+dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKICAgICAgICAgZGlkSGFu
ZGxlRXZlbnQgPSBtX3BsdWdpbi0+aGFuZGxlQ29udGV4dE1lbnVFdmVudChzdGF0aWNfY2FzdDxj
b25zdCBXZWJNb3VzZUV2ZW50Jj4oKmN1cnJlbnRFdmVudCkpOworICAgICAgICBwbHVnaW5EaWRS
ZWNlaXZlVXNlckludGVyYWN0aW9uKCk7CiAgICAgfSBlbHNlIGlmICgoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGN1cnJlbnRFdmVudC0+dHlwZSgpID09IFdl
YkV2ZW50OjpLZXlEb3duKQogICAgICAgICAgICAgICAgfHwgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXVwRXZlbnQgJiYgY3VycmVudEV2ZW50LT50eXBlKCkgPT0gV2ViRXZlbnQ6
OktleVVwKSkgewotICAgICAgICAvLyBXZSBoYXZlIGEga2V5Ym9hcmQgZXZlbnQuCiAgICAgICAg
IGRpZEhhbmRsZUV2ZW50ID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCY+KCpjdXJyZW50RXZlbnQpKTsKKyAgICAgICAgcGx1
Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbigpOwogICAgIH0KIAogICAgIGlmIChkaWRIYW5k
bGVFdmVudCkKQEAgLTE2MDgsNCArMTYwNywxMyBAQCBib29sIFBsdWdpblZpZXc6OnNob3VsZEFs
d2F5c0F1dG9TdGFydCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGx1Z2luLT5zaG91bGRBbHdheXNB
dXRvU3RhcnQoKTsKIH0KIAordm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlcklu
dGVyYWN0aW9uKCkKK3sKKyAgICBpZiAobV9kaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwor
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBsdWdJbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24o
bV9wbHVnaW5FbGVtZW50LT5wbHVnSW5PcmlnaW5IYXNoKCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5oCmluZGV4IDQ5NmM4ZjUyNzAxNjE2NmYwYWQzN2IzNzFkNTU3MGQ0MWRmNTYzNTYuLjdlMDdh
N2I0NzM1NDk5OTRkOGYzM2MyZmEyNDYyZWZhOTAwY2RjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMTI4LDYgKzEyOCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWRlbGl2ZXJNYW51YWxTdHJlYW0oKTsKIAogICAgIHZvaWQgcGx1
Z2luU25hcHNob3RUaW1lckZpcmVkKFdlYkNvcmU6OkRlZmVycmFibGVPbmVTaG90VGltZXI8UGx1
Z2luVmlldz4qKTsKKyAgICB2b2lkIHBsdWdpbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24oKTsK
IAogICAgIC8vIFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
MjU3LDYgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyB0aW1lciBpcyB1c2VkIHdoZW4g
cGx1Z2luIHNuYXBzaG90dGluZyBpcyBlbmFibGVkLCB0byBjYXB0dXJlIGEgcGx1Z2luIHBsYWNl
aG9sZGVyLgogICAgIFdlYkNvcmU6OkRlZmVycmFibGVPbmVTaG90VGltZXI8UGx1Z2luVmlldz4g
bV9wbHVnaW5TbmFwc2hvdFRpbWVyOwogICAgIHVuc2lnbmVkIG1fY291bnRTbmFwc2hvdFJldHJp
ZXM7CisgICAgYm9vbCBtX2RpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb247CiAKICAgICBkb3VibGUg
bV9wYWdlU2NhbGVGYWN0b3I7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggN2ZlMTFiNTdlNGM1ODFmZTJiNjY5MzY1NTBhY2ZiNmI0YzI5MjczNC4uYzZk
ZDUyNTI4ZmI0NmUxN2Q4ZTllMjFmMDU1ZmM1YWVhYTk1MTNlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIApAQCAtMTIzLDYgKzEyNCw5IEBACiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKy8vIFRoaXMgc2hvdWxkIGJlIGxlc3MgdGhhbiBw
bHVnSW5BdXRvU3RhcnRFeHBpcmF0aW9uVGltZVRocmVzaG9sZCBpbiBQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlci4KK3N0YXRpYyBjb25zdCBkb3VibGUgcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRp
bWVVcGRhdGVUaHJlc2hvbGQgPSAyOSAqIDI0ICogNjA7CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBXZWJQcm9jZXNzJiBXZWJQcm9jZXNzOjpzaGFyZWQoKQpAQCAtMzIwLDggKzMyNCw3IEBAIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1lCiAjZW5kaWYKICAgICBzZXRUZXJtaW5hdGlvblRpbWVvdXQo
cGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVvdXQpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbihwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFy
dE9yaWdpbnNbaV0pOworICAgIHJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhwYXJhbWV0ZXJz
LnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpOwogfQogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKQEAgLTc5Nyw3ICs4MDAsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpjbGVhclBsdWdpblNpdGVE
YXRhKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwbHVnaW5QYXRocywgY29uc3QgVmUKIAogYm9vbCBX
ZWJQcm9jZXNzOjppc1BsdWdJbkF1dG9TdGFydE9yaWdpbih1bnNpZ25lZCBwbHVnSW5PcmlnaW5I
YXNoKQogewotICAgIHJldHVybiBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuY29udGFpbnMocGx1
Z0luT3JpZ2luSGFzaCk7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuZmluZChwbHVnSW5PcmlnaW5IYXNo
KTsKKyAgICBpZiAoaXQgPT0gbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5zLmVuZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgPCBpdC0+dmFsdWU7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzczo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0cmlu
ZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCkKQEAgLTgxMCwxNiArODE2
LDMwIEBAIHZvaWQgV2ViUHJvY2Vzczo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKGNvbnN0IFN0
cmluZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1CiAgICAgY29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKHBhZ2VPcmln
aW4sIHBsdWdJbk9yaWdpbkhhc2gpLCAwKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpkaWRBZGRQ
bHVnSW5BdXRvU3RhcnRPcmlnaW4odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCkKK3ZvaWQgV2Vi
UHJvY2Vzczo6ZGlkQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHVuc2lnbmVkIHBsdWdJbk9yaWdp
bkhhc2gsIGRvdWJsZSBleHBpcmF0aW9uVGltZSkKK3sKKyAgICAvLyBXaGVuIGNhbGxlZCwgc29t
ZSB3ZWIgcHJvY2VzcyAod2hpY2ggYWxzbyBtaWdodCBiZSB0aGlzIG9uZSkgYWRkZWQgdGhlIG9y
aWdpbiBmb3IgYXV0by1zdGFydGluZywKKyAgICAvLyBvciByZWNlaXZlZCB1c2VyIGludGVyYWN0
aW9uLgorICAgIC8vIFNldCB0aGUgYml0IHRvIGF2b2lkIGhhdmluZyByZWR1bmRhbnRseSBjYWxs
IGludG8gdGhlIFVJIHByb2Nlc3MgdXBvbiB1c2VyIGludGVyYWN0aW9uLgorICAgIG1fcGx1Z0lu
QXV0b1N0YXJ0T3JpZ2lucy5zZXQocGx1Z0luT3JpZ2luSGFzaCwgZXhwaXJhdGlvblRpbWUpOwor
fQorCit2b2lkIFdlYlByb2Nlc3M6OnJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhjb25zdCBI
YXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+JiBoYXNoZXMpCiB7Ci0gICAgbV9wbHVnSW5BdXRvU3Rh
cnRPcmlnaW5zLmFkZChwbHVnSW5PcmlnaW5IYXNoKTsKKyAgICBtX3BsdWdJbkF1dG9TdGFydE9y
aWdpbnMuc3dhcChjb25zdF9jYXN0PEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4mPihoYXNoZXMp
KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5zQ2hhbmdlZChj
b25zdCBWZWN0b3I8dW5zaWduZWQ+JiBoYXNoZXMpCit2b2lkIFdlYlByb2Nlc3M6OnBsdWdJbkRp
ZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCkKIHsKLSAg
ICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuY2xlYXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGhhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgZGlkQWRkUGx1Z0luQXV0b1N0YXJ0
T3JpZ2luKGhhc2hlc1tpXSk7CisgICAgaWYgKCFwbHVnSW5PcmlnaW5IYXNoKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+OjppdGVyYXRvciBpdCA9IG1f
cGx1Z0luQXV0b1N0YXJ0T3JpZ2lucy5maW5kKHBsdWdJbk9yaWdpbkhhc2gpOworICAgIEFTU0VS
VChpdCAhPSBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbnMuZW5kKCkpOworICAgIGlmIChpdC0+dmFs
dWUgLSBjdXJyZW50VGltZSgpID4gcGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRpbWVVcGRhdGVU
aHJlc2hvbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViQ29udGV4dDo6UGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbihwbHVnSW5P
cmlnaW5IYXNoKSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyb21Db3VudGVkU2V0VG9IYXNoTWFw
KFR5cGVDb3VudFNldCogY291bnRlZFNldCwgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90PiYgbWFw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCAxM2E0NjdkZTZlOTYw
YjVhMmY5ZmYwMzE0ZGYyMTQ1MDcxMGY2YmE3Li4yYzg0NjM3MjZkM2Q5Y2I3OWRhNTAwNTkwY2Yx
YTEyNGFiNmY2ZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAt
MTU2LDggKzE1Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKFdlYkNvcmU6
OkxpbmtIYXNoKTsKICAgICBib29sIGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6TGlua0hhc2gpIGNv
bnN0OwogCi0gICAgYm9vbCBpc1BsdWdJbkF1dG9TdGFydE9yaWdpbih1bnNpZ25lZCBwbHVnSW5P
cmlnaW5oYXNoKTsKKyAgICBib29sIGlzUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHVuc2lnbmVkIHBs
dWdJbk9yaWdpbkhhc2gpOwogICAgIHZvaWQgYWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luKGNvbnN0
IFN0cmluZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCk7CisgICAgdm9p
ZCBwbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhh
c2gpOwogCiAgICAgYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkOyB9CiAKQEAgLTI0MSw4ICsyNDIsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgdmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhc2hlcyk7CiAgICAgdm9pZCBhbGxWaXNpdGVkTGlua1N0
YXRlQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBkaWRBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW4odW5z
aWduZWQgcGx1Z0luT3JpZ2luSGFzaCk7Ci0gICAgdm9pZCBwbHVnSW5BdXRvU3RhcnRPcmlnaW5z
Q2hhbmdlZChjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBoYXNoZXMpOworICAgIHZvaWQgZGlkQWRk
UGx1Z0luQXV0b1N0YXJ0T3JpZ2luKHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gsIGRvdWJsZSBl
eHBpcmF0aW9uVGltZSk7CisgICAgdm9pZCByZXNldFBsdWdJbkF1dG9TdGFydE9yaWdpbnMoY29u
c3QgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPiYgaGFzaGVzKTsKIAogICAgIHZvaWQgcGxhdGZv
cm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwpOwogICAgIHZvaWQgcGxhdGZvcm1DbGVhclJlc291
cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhcik7CkBAIC0zMjYsNyArMzI3LDcgQEAgcHJp
dmF0ZToKICAgICBWaXNpdGVkTGlua1RhYmxlIG1fdmlzaXRlZExpbmtUYWJsZTsKICAgICBib29s
IG1fc2hvdWxkVHJhY2tWaXNpdGVkTGlua3M7CiAKLSAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3Bs
dWdJbkF1dG9TdGFydE9yaWdpbnM7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPiBtX3Bs
dWdJbkF1dG9TdGFydE9yaWdpbnM7CiAKICAgICBib29sIG1faGFzU2V0Q2FjaGVNb2RlbDsKICAg
ICBDYWNoZU1vZGVsIG1fY2FjaGVNb2RlbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAwNWQwNTZkZDZmOGIwNWNmMTM4YTU5MjQx
OGE4MjgwZTFkMDM4NWRkLi4wMWU3OTk0NTY0ZGY3ZmJlODk0ZDBhMGNmNGFmNzI3NWU4MzYxNjRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCkBAIC03MCw4ICs3MCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3MgewogICAgIEdldFNp
dGVzV2l0aFBsdWdpbkRhdGEoVmVjdG9yPFdURjo6U3RyaW5nPiBwbHVnaW5QYXRocywgdWludDY0
X3QgY2FsbGJhY2tJRCkKICAgICBDbGVhclBsdWdpblNpdGVEYXRhKFZlY3RvcjxXVEY6OlN0cmlu
Zz4gcGx1Z2luUGF0aHMsIFZlY3RvcjxXVEY6OlN0cmluZz4gc2l0ZXMsIHVpbnQ2NF90IGZsYWdz
LCB1aW50NjRfdCBtYXhBZ2VJblNlY29uZHMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAjZW5kaWYK
LSAgICBEaWRBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW4odWludDMyX3QgaGFzaCkKLSAgICBQbHVn
SW5BdXRvU3RhcnRPcmlnaW5zQ2hhbmdlZChWZWN0b3I8dWludDMyX3Q+IGhhc2hlcykKKyAgICBE
aWRBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW4odWludDMyX3QgaGFzaCwgZG91YmxlIGV4cGlyYXRp
b25UaW1lKQorICAgIFJlc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhIYXNoTWFwPHVpbnQzMl90
LGRvdWJsZT4gaGFzaGVzKQogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQogICAgIFBsdWdp
blByb2Nlc3NDcmFzaGVkKFN0cmluZyBwbHVnaW5Qcm9jZXNzLCB1aW50MzJfdCBwcm9jZXNzVHlw
ZSkgRGlzcGF0Y2hPbkNvbm5lY3Rpb25RdWV1ZQo=
</data>
<flag name="review"
          id="198663"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>